usb-detector: Add UsbPortDbus property

Add UsbPortDbus property which is a normalized version of UsbPort (replacing non-alphanumeric/underscore characters with underscores). This is used for D-Bus path construction in Entity-Manager to avoid path mismatches, while keeping UsbPort in its original format for sysfs lookup.

Tested: Built and verified.
Google-Bug-Id: 536095010
Change-Id: Ic9ba8193c962448231989f7de3adb8fc80358755
Signed-off-by: Guangzong Chen <guangzong@google.com>
TAG=agy
CONV=73f88cc8-43e3-450d-b174-1a11d58204ba
diff --git a/main.cpp b/main.cpp
index 6f4dee2..6aed930 100644
--- a/main.cpp
+++ b/main.cpp
@@ -52,6 +52,8 @@
                              sdbusplus::asio::PropertyPermission::readOnly);
     iface->register_property("UsbPort", usbInfInfo.port,
                              sdbusplus::asio::PropertyPermission::readOnly);
+    iface->register_property("PortDbus", usbInfInfo.portDbus,
+                             sdbusplus::asio::PropertyPermission::readOnly);
     iface->register_property("Configuration", usbInfInfo.configuration,
                              sdbusplus::asio::PropertyPermission::readOnly);
     iface->register_property("InterfaceString", usbInfInfo.interfaceString,
diff --git a/usb_monitor.cpp b/usb_monitor.cpp
index 3080e50..ba4c196 100644
--- a/usb_monitor.cpp
+++ b/usb_monitor.cpp
@@ -2,6 +2,7 @@
 
 #include <stdplus/print.hpp>
 
+#include <regex>
 #include <sstream>
 #include <string_view>
 
@@ -230,6 +231,8 @@
     device.interfacePath = infPath;
     device.busNum = busNum;
     device.port = portPathOnly;
+    device.portDbus =
+        "u" + std::regex_replace(portPathOnly, std::regex("\\."), "u");
     device.interfaceString = GetSysAttrValue(usbInf, "iInterface");
     device.interfaceNum = GetSysAttrValue(usbInf, "bInterfaceNumber");
     device.interfaceClass = GetSysAttrValue(usbInf, "bInterfaceClass");
diff --git a/usb_monitor.hpp b/usb_monitor.hpp
index ba28697..c95e47e 100644
--- a/usb_monitor.hpp
+++ b/usb_monitor.hpp
@@ -23,6 +23,7 @@
     std::string rootHubPath;
     std::string busNum;
     std::string port;
+    std::string portDbus;
     std::string vendorId;
     std::string productId;
     std::string manufacturer;