diff options
author | Konstantin Aladyshev <aladyshev22@gmail.com> | 2021-11-09 16:42:45 +0300 |
---|---|---|
committer | Konstantin Aladyshev <aladyshev22@gmail.com> | 2021-11-09 16:44:39 +0300 |
commit | 513eba0cf264b393b5e25d53aa82f2d8a1f8d9b8 (patch) | |
tree | 8f1829115367c34efc67417f4dd047f18a01c562 /Lessons/Lesson_54/UefiLessonsPkg | |
parent | 4bb8a76753cbc9c5158e2269f9d911a0960d5f03 (diff) | |
download | UEFI-Lessons-513eba0cf264b393b5e25d53aa82f2d8a1f8d9b8.tar.gz UEFI-Lessons-513eba0cf264b393b5e25d53aa82f2d8a1f8d9b8.tar.bz2 UEFI-Lessons-513eba0cf264b393b5e25d53aa82f2d8a1f8d9b8.zip |
Add lesson 54
Signed-off-by: Konstantin Aladyshev <aladyshev22@gmail.com>
Diffstat (limited to 'Lessons/Lesson_54/UefiLessonsPkg')
4 files changed, 276 insertions, 0 deletions
diff --git a/Lessons/Lesson_54/UefiLessonsPkg/HIIAddLocalization/HIIAddLocalization.c b/Lessons/Lesson_54/UefiLessonsPkg/HIIAddLocalization/HIIAddLocalization.c new file mode 100644 index 0000000..27e525f --- /dev/null +++ b/Lessons/Lesson_54/UefiLessonsPkg/HIIAddLocalization/HIIAddLocalization.c @@ -0,0 +1,134 @@ +#include <Library/UefiBootServicesTableLib.h> +#include <Library/UefiLib.h> + +#include <Library/HiiLib.h> +#include <Library/UefiHiiServicesLib.h> +#include <Library/MemoryAllocationLib.h> + +EFI_STATUS +EFIAPI +UefiMain ( + IN EFI_HANDLE ImageHandle, + IN EFI_SYSTEM_TABLE *SystemTable + ) +{ + EFI_GUID PackageGuid = {0xD9DCC5DF, 0x4007, 0x435E, {0x90, 0x98, 0x89, 0x70, 0x93, 0x55, 0x04, 0xB2 }}; + EFI_HII_HANDLE* Handle = HiiGetHiiHandles(&PackageGuid); + +/* *** If you add this: *** + for (UINTN i=0; i<0xFFFF; i++) { + EFI_STRING String = HiiGetString(*Handle, i, "en-US"); + if (String != NULL) { + Print(L"ID=%d, %s\n", i, String); + } + FreePool(String); + } +*/ +/* *** You would get: *** +FS0:\> HIIAddLocalization.efi +en;fr;en-US;fr-FR +LangLen = 17 +en;fr;en-US;fr-FR;ru-RU +Error! Can't set PlatformLangCodes variable, status=Write Protected +ID=1, English +ID=2, OVMF Platform Configuration +ID=3, Change various OVMF platform settings. +ID=4, OVMF Settings +ID=5, Preferred Resolution at Next Boot +ID=6, The preferred resolution of the Graphics Console at next boot. It might be unset, or even invalid (hence ignored) wrt. the video RAM size. +ID=7, Change Preferred Resolution for Next Boot +ID=8, You can specify a new preference for the Graphics Console here. The list is filtered against the video RAM size. +ID=9, Commit Changes and Exit +ID=10, Discard Changes and Exit +ID=11, 640x480 +ID=12, 800x480 +ID=13, 800x600 +ID=14, 832x624 +ID=15, 960x640 +ID=16, 1024x600 +ID=17, 1024x768 +ID=18, 1152x864 +ID=19, 1152x870 +ID=20, 1280x720 +ID=21, 1280x760 +ID=22, 1280x768 +ID=23, 1280x800 +ID=24, 1280x960 +ID=25, 1280x1024 +ID=26, 1360x768 +ID=27, 1366x768 +ID=28, 1400x1050 +ID=29, 1440x900 +ID=30, 1600x900 +ID=31, 1600x1200 +ID=32, 1680x1050 +ID=33, 1920x1080 +ID=34, 1920x1200 +ID=35, 1920x1440 +ID=36, 2000x2000 +ID=37, 2048x1536 +ID=38, 2048x2048 +ID=39, 2560x1440 +ID=40, 2560x1600 +*/ + + CHAR16* FrenchStrings[] = { + L"Configuration de la OVMF plateforme", + L"Modifier divers paramètres de la plateforme OVMF", + L"Paramètres OVMF", + L"Résolution préférée au prochain démarrage", + L"La résolution préférée de la console graphique au prochain démarrage. Il peut être non défini, ou même invalide (donc ignoré) wrt. la taille de la RAM vidéo.", + L"Modifier la résolution préférée pour le prochain démarrage", + L"Vous pouvez spécifier ici une nouvelle préférence pour la console graphique. La liste est filtrée en fonction de la taille de la RAM vidéo.", + L"Valider les modifications et quitter", + L"Annuler les changements et quitter", + L"640x480", + L"800x480", + L"800x600", + L"832x624", + L"960x640", + L"1024x600", + L"1024x768", + L"1152x864", + L"1152x870", + L"1280x720", + L"1280x760", + L"1280x768", + L"1280x800", + L"1280x960", + L"1280x1024", + L"1360x768", + L"1366x768", + L"1400x1050", + L"1440x900", + L"1600x900", + L"1600x1200", + L"1680x1050", + L"1920x1080", + L"1920x1200", + L"1920x1440", + L"2000x2000", + L"2048x1536", + L"2048x2048", + L"2560x1440", + L"2560x1600", + }; + + EFI_STATUS Status; + for (UINTN i=0; i<(sizeof(FrenchStrings)/sizeof(FrenchStrings[0])); i++) { + EFI_STRING_ID StringId; + if (i==0) { + Status = gHiiString->NewString(gHiiString, *Handle, &StringId, "fr-FR", L"French", L"", NULL); + if (EFI_ERROR(Status)) { + Print(L"Error! NewString fail\n"); + } + } + StringId = i+2; + Status = gHiiString->SetString(gHiiString, *Handle, StringId, "fr-FR", FrenchStrings[i], NULL); + if (EFI_ERROR(Status)) { + Print(L"Error! SetString fail for ID=%d\n", StringId); + } + } + + return EFI_SUCCESS; +} diff --git a/Lessons/Lesson_54/UefiLessonsPkg/HIIAddLocalization/HIIAddLocalization.inf b/Lessons/Lesson_54/UefiLessonsPkg/HIIAddLocalization/HIIAddLocalization.inf new file mode 100644 index 0000000..2d5a4f6 --- /dev/null +++ b/Lessons/Lesson_54/UefiLessonsPkg/HIIAddLocalization/HIIAddLocalization.inf @@ -0,0 +1,20 @@ +[Defines] + INF_VERSION = 1.25 + BASE_NAME = HIIAddLocalization + FILE_GUID = 1d20e66e-4b7e-4cbb-a8f5-a6e427aee1de + MODULE_TYPE = UEFI_APPLICATION + VERSION_STRING = 1.0 + ENTRY_POINT = UefiMain + +[Sources] + HIIAddLocalization.c + +[Packages] + MdePkg/MdePkg.dec + MdeModulePkg/MdeModulePkg.dec + +[LibraryClasses] + UefiApplicationEntryPoint + UefiLib + HiiLib + UefiHiiServicesLib diff --git a/Lessons/Lesson_54/UefiLessonsPkg/UefiLessonsPkg.dec b/Lessons/Lesson_54/UefiLessonsPkg/UefiLessonsPkg.dec new file mode 100644 index 0000000..40b351c --- /dev/null +++ b/Lessons/Lesson_54/UefiLessonsPkg/UefiLessonsPkg.dec @@ -0,0 +1,45 @@ +## +# Copyright (c) 2021, Konstantin Aladyshev <aladyshev22@gmail.com> +# +# SPDX-License-Identifier: MIT +## + +[Defines]
+ DEC_SPECIFICATION = 0x00010005
+ PACKAGE_NAME = UefiLessonsPkg
+ PACKAGE_GUID = 7e7edbba-ca2c-4177-a3f0-d3371358773a
+ PACKAGE_VERSION = 1.01
+
+[Includes]
+ Include
+
+[Guids]
+ # FILE_GUID as defined in UefiLessonsPkg/HelloWorld/HelloWorld.inf
+ gHelloWorldFileGuid = {0x2e55fa38, 0xf148, 0x42d3, {0xaf, 0x90, 0x1b, 0xe2, 0x47, 0x32, 0x3e, 0x30}}
+ gUefiLessonsPkgTokenSpaceGuid = {0x150cab53, 0xad47, 0x4385, {0xb5, 0xdd, 0xbc, 0xfc, 0x76, 0xba, 0xca, 0xf0}}
+ gHIIStringsCGuid = { 0x8e0b8ed3, 0x14f7, 0x499d, { 0xa2, 0x24, 0xae, 0xe8, 0x9d, 0xc9, 0x7f, 0xa3 }}
+ gHIIStringsUNIGuid = { 0x6ee19058, 0x0fe2, 0x44ed, { 0x89, 0x1c, 0xa5, 0xd7, 0xe1, 0x08, 0xee, 0x1a }}
+ gHIIStringsUNIRCGuid = { 0x785693b4, 0x623e, 0x40fa, { 0x9a, 0x45, 0x68, 0xda, 0x38, 0x30, 0x89, 0xdd }}
+ gHIIAddRussianFontGuid = { 0x9fe2f616, 0x323c, 0x45a7, { 0x87, 0xa2, 0xdf, 0xef, 0xf5, 0x17, 0xcc, 0x66 }}
+
+[Protocols]
+ gSimpleClassProtocolGuid = { 0xb5510eea, 0x6f11, 0x4e4b, { 0xad, 0x0f, 0x35, 0xce, 0x17, 0xbd, 0x7a, 0x67 }}
+
+[PcdsFixedAtBuild]
+ gUefiLessonsPkgTokenSpaceGuid.PcdMyVar32|42|UINT32|0x00000001
+ gUefiLessonsPkgTokenSpaceGuid.PcdMyVar32_1|42|UINT32|0x00000002
+ gUefiLessonsPkgTokenSpaceGuid.PcdMyVar32_2|42|UINT32|0x00000003
+ gUefiLessonsPkgTokenSpaceGuid.PcdMyVarBool|FALSE|BOOLEAN|0x00000004
+
+[PcdsPatchableInModule]
+ gUefiLessonsPkgTokenSpaceGuid.PcdMyPatchableVar32|0x31313131|UINT32|0x10000001
+
+[PcdsFeatureFlag]
+ gUefiLessonsPkgTokenSpaceGuid.PcdMyFeatureFlagVar|FALSE|BOOLEAN|0x20000001
+
+[PcdsDynamic]
+ gUefiLessonsPkgTokenSpaceGuid.PcdMyDynamicVar32|0x38323232|UINT32|0x30000001
+ gUefiLessonsPkgTokenSpaceGuid.PcdMyDynamicVar32_1|42|UINT32|0x30000002
+
+[PcdsDynamicEx]
+ gUefiLessonsPkgTokenSpaceGuid.PcdMyDynamicExVar32|0x38333333|UINT32|0x40000001
diff --git a/Lessons/Lesson_54/UefiLessonsPkg/UefiLessonsPkg.dsc b/Lessons/Lesson_54/UefiLessonsPkg/UefiLessonsPkg.dsc new file mode 100644 index 0000000..48b78ca --- /dev/null +++ b/Lessons/Lesson_54/UefiLessonsPkg/UefiLessonsPkg.dsc @@ -0,0 +1,77 @@ +## +# Copyright (c) 2021, Konstantin Aladyshev <aladyshev22@gmail.com> +# +# SPDX-License-Identifier: MIT +## + +[Defines] + DSC_SPECIFICATION = 0x0001001C + PLATFORM_GUID = 3db7270f-ffac-4139-90a4-0ae68f3f8167 + PLATFORM_VERSION = 0.01 + PLATFORM_NAME = UefiLessonsPkg + SKUID_IDENTIFIER = DEFAULT + SUPPORTED_ARCHITECTURES = X64 + BUILD_TARGETS = RELEASE + + +[LibraryClasses] + UefiApplicationEntryPoint|MdePkg/Library/UefiApplicationEntryPoint/UefiApplicationEntryPoint.inf + UefiBootServicesTableLib|MdePkg/Library/UefiBootServicesTableLib/UefiBootServicesTableLib.inf + DebugLib|MdePkg/Library/UefiDebugLibConOut/UefiDebugLibConOut.inf + BaseLib|MdePkg/Library/BaseLib/BaseLib.inf + #PcdLib|MdePkg/Library/BasePcdLibNull/BasePcdLibNull.inf + PcdLib|MdePkg/Library/DxePcdLib/DxePcdLib.inf + BaseMemoryLib|MdePkg/Library/BaseMemoryLib/BaseMemoryLib.inf + RegisterFilterLib|MdePkg/Library/RegisterFilterLibNull/RegisterFilterLibNull.inf + PrintLib|MdePkg/Library/BasePrintLib/BasePrintLib.inf + DebugPrintErrorLevelLib|MdePkg/Library/BaseDebugPrintErrorLevelLib/BaseDebugPrintErrorLevelLib.inf + UefiLib|MdePkg/Library/UefiLib/UefiLib.inf + MemoryAllocationLib|MdePkg/Library/UefiMemoryAllocationLib/UefiMemoryAllocationLib.inf + DevicePathLib|MdePkg/Library/UefiDevicePathLib/UefiDevicePathLib.inf + UefiRuntimeServicesTableLib|MdePkg/Library/UefiRuntimeServicesTableLib/UefiRuntimeServicesTableLib.inf + ShellCEntryLib|ShellPkg/Library/UefiShellCEntryLib/UefiShellCEntryLib.inf + ShellLib|ShellPkg/Library/UefiShellLib/UefiShellLib.inf + FileHandleLib|MdePkg/Library/UefiFileHandleLib/UefiFileHandleLib.inf + HiiLib|MdeModulePkg/Library/UefiHiiLib/UefiHiiLib.inf + SortLib|MdeModulePkg/Library/UefiSortLib/UefiSortLib.inf + UefiHiiServicesLib|MdeModulePkg/Library/UefiHiiServicesLib/UefiHiiServicesLib.inf + UefiDriverEntryPoint|MdePkg/Library/UefiDriverEntryPoint/UefiDriverEntryPoint.inf + #SimpleLibrary|UefiLessonsPkg/Library/SimpleLibrary/SimpleLibrary.inf + #SimpleLibrary|UefiLessonsPkg/Library/SimpleLibraryWithConstructor/SimpleLibraryWithConstructor.inf + SimpleLibrary|UefiLessonsPkg/Library/SimpleLibraryWithConstructorAndDestructor/SimpleLibraryWithConstructorAndDestructor.inf + +[Components] + UefiLessonsPkg/SimplestApp/SimplestApp.inf + UefiLessonsPkg/HelloWorld/HelloWorld.inf + UefiLessonsPkg/ImageHandle/ImageHandle.inf + UefiLessonsPkg/ImageInfo/ImageInfo.inf + UefiLessonsPkg/MemoryInfo/MemoryInfo.inf + UefiLessonsPkg/SimpleShellApp/SimpleShellApp.inf + UefiLessonsPkg/ListVariables/ListVariables.inf + UefiLessonsPkg/ShowBootVariables/ShowBootVariables.inf + UefiLessonsPkg/InteractiveApp/InteractiveApp.inf + UefiLessonsPkg/PCDLesson/PCDLesson.inf + UefiLessonsPkg/SmbiosInfo/SmbiosInfo.inf + UefiLessonsPkg/ShowTables/ShowTables.inf + UefiLessonsPkg/AcpiInfo/AcpiInfo.inf + UefiLessonsPkg/SaveBGRT/SaveBGRT.inf + UefiLessonsPkg/ListPCI/ListPCI.inf + UefiLessonsPkg/SimpleDriver/SimpleDriver.inf + UefiLessonsPkg/PCIRomInfo/PCIRomInfo.inf + UefiLessonsPkg/Library/SimpleLibrary/SimpleLibrary.inf + UefiLessonsPkg/Library/SimpleLibraryWithConstructor/SimpleLibraryWithConstructor.inf + UefiLessonsPkg/SimpleLibraryUser/SimpleLibraryUser.inf + UefiLessonsPkg/SimpleClassProtocol/SimpleClassProtocol.inf + UefiLessonsPkg/SimpleClassUser/SimpleClassUser.inf + UefiLessonsPkg/HotKeyDriver/HotKeyDriver.inf + UefiLessonsPkg/ShowHII/ShowHII.inf + UefiLessonsPkg/HIIStringsC/HIIStringsC.inf + UefiLessonsPkg/HIIStringsUNI/HIIStringsUNI.inf + UefiLessonsPkg/HIIStringsUNIRC/HIIStringsUNIRC.inf + UefiLessonsPkg/HIIStringsMan/HIIStringsMan.inf + UefiLessonsPkg/HIIAddRussianFont/HIIAddRussianFont.inf + UefiLessonsPkg/HIIAddLocalization/HIIAddLocalization.inf + +[PcdsFixedAtBuild] + gUefiLessonsPkgTokenSpaceGuid.PcdMyVar32_2|44 + |