+/**\r
+ Converts a Bluetooth device path structure to its string representative.\r
+\r
+ @param Str The string representative of input device.\r
+ @param DevPath The input device path structure.\r
+ @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation\r
+ of the display node is used, where applicable. If DisplayOnly\r
+ is FALSE, then the longer text representation of the display node\r
+ is used.\r
+ @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text\r
+ representation for a device node can be used, where applicable.\r
+\r
+**/\r
+VOID\r
+DevPathToTextBluetooth (\r
+ IN OUT POOL_PRINT *Str,\r
+ IN VOID *DevPath,\r
+ IN BOOLEAN DisplayOnly,\r
+ IN BOOLEAN AllowShortcuts\r
+ )\r
+{\r
+ BLUETOOTH_DEVICE_PATH *Bluetooth;\r
+\r
+ Bluetooth = DevPath;\r
+ UefiDevicePathLibCatPrint (\r
+ Str,\r
+ L"Bluetooth(%02x%02x%02x%02x%02x%02x)",\r
+ Bluetooth->BD_ADDR.Address[5],\r
+ Bluetooth->BD_ADDR.Address[4],\r
+ Bluetooth->BD_ADDR.Address[3],\r
+ Bluetooth->BD_ADDR.Address[2],\r
+ Bluetooth->BD_ADDR.Address[1],\r
+ Bluetooth->BD_ADDR.Address[0]\r
+ );\r
+}\r
+\r
+/**\r
+ Converts a Wi-Fi device path structure to its string representative.\r
+\r
+ @param Str The string representative of input device.\r
+ @param DevPath The input device path structure.\r
+ @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation\r
+ of the display node is used, where applicable. If DisplayOnly\r
+ is FALSE, then the longer text representation of the display node\r
+ is used.\r
+ @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text\r
+ representation for a device node can be used, where applicable.\r
+\r
+**/\r
+VOID\r
+DevPathToTextWiFi (\r
+ IN OUT POOL_PRINT *Str,\r
+ IN VOID *DevPath,\r
+ IN BOOLEAN DisplayOnly,\r
+ IN BOOLEAN AllowShortcuts\r
+ )\r
+{\r
+ WIFI_DEVICE_PATH *WiFi;\r
+ UINT8 SSId[33];\r
+\r
+ WiFi = DevPath;\r
+\r
+ SSId[32] = '\0';\r
+ CopyMem (SSId, WiFi->SSId, 32);\r
+\r
+ UefiDevicePathLibCatPrint (Str, L"Wi-Fi(%a)", SSId);\r
+}\r
+\r
+/**\r
+ Converts a URI device path structure to its string representative.\r
+\r
+ @param Str The string representative of input device.\r
+ @param DevPath The input device path structure.\r
+ @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation\r
+ of the display node is used, where applicable. If DisplayOnly\r
+ is FALSE, then the longer text representation of the display node\r
+ is used.\r
+ @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text\r
+ representation for a device node can be used, where applicable.\r
+\r
+**/\r
+VOID\r
+DevPathToTextUri (\r
+ IN OUT POOL_PRINT *Str,\r
+ IN VOID *DevPath,\r
+ IN BOOLEAN DisplayOnly,\r
+ IN BOOLEAN AllowShortcuts\r
+ )\r
+{\r
+ URI_DEVICE_PATH *Uri;\r
+ UINTN UriLength;\r
+ CHAR8 *UriStr;\r
+\r
+ //\r
+ // Uri in the device path may not be null terminated.\r
+ //\r
+ Uri = DevPath;\r
+ UriLength = DevicePathNodeLength (Uri) - sizeof (URI_DEVICE_PATH);\r
+ UriStr = AllocatePool (UriLength + 1);\r
+ ASSERT (UriStr != NULL);\r
+\r
+ CopyMem (UriStr, Uri->Uri, UriLength);\r
+ UriStr[UriLength] = '\0';\r
+ UefiDevicePathLibCatPrint (Str, L"Uri(%a)", UriStr);\r
+ FreePool (UriStr);\r
+}\r
+\r