const std::string getSysPath()

in servo_pkg/src/pwm.cpp [44:69]


    const std::string getSysPath(){
        // Set default to pwmchip0 from previous release
        auto syspath = std::string(BASE_SYS_PATH) + std::string("pwmchip0");
        // ls -al /sys/class/pwm/
        for (const auto & entry : std::filesystem::directory_iterator(BASE_SYS_PATH)){
            auto filepath = entry.path();
            if(std::filesystem::exists(filepath) && std::filesystem::is_symlink(filepath)){
                std::string symlinkTarget = std::filesystem::read_symlink(filepath).c_str();
                // grep "0000:00:17.0"
                if (symlinkTarget.find(PWMDEV) != std::string::npos) {
                    auto tmp = symlinkTarget;
                    std::string delimiter = "/";
                    size_t pos = 0;
                    std::string token;
                    size_t tokenCount = 0;
                    // awk '{ print $9}'
                    while ((pos = tmp.find(delimiter)) != std::string::npos && tokenCount < 9) {
                        tmp.erase(0, pos + delimiter.length());
                        tokenCount++;
                    }
                    syspath = std::string(BASE_SYS_PATH) + std::string(tmp);
                }
            }
        }
        return syspath;
    }