blob: b7cc6f38364b0827a62053cad1d7fcb88ea253d4 [file] [log] [blame]
/**
* Copyright 2017 Google Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include "util.hpp"
#include <filesystem>
#include <iostream>
#include <string>
namespace pid_control
{
/*
* There are two basic paths I want to support:
* 1. /sys/class/hwmon/hwmon0/pwm1
* 2. /sys/devices/platform/ahb/1e786000.pwm-tacho-controller/hwmon/<asterisk
* asterisk>/pwm1
*
* In this latter case, I want to fill in that gap. Assuming because it's this
* path that it'll only have one directory there.
*/
static constexpr auto platform = "/sys/devices/platform/";
namespace fs = std::filesystem;
std::string FixupPath(std::string original)
{
std::string::size_type n, x;
/* TODO: Consider the merits of using regex for this. */
n = original.find("**");
x = original.find(platform);
if ((n != std::string::npos) && (x != std::string::npos))
{
/* This path has some missing pieces and we support it. */
std::string base = original.substr(0, n);
std::string fldr;
std::string f = original.substr(n + 2, original.size() - (n + 2));
/* Equivalent to glob and grab 0th entry. */
for (const auto& folder : fs::directory_iterator(base))
{
fldr = folder.path();
break;
}
if (!fldr.length())
{
return original;
}
return fldr + f;
}
else
{
/* It'll throw an exception when we use it if it's still bad. */
return original;
}
}
} // namespace pid_control