/* // Copyright (c) 2018 Intel Corporation // // 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. */ /// \file devices.hpp #pragma once #include namespace devices { struct CmpStr { bool operator()(const char* a, const char* b) const { return std::strcmp(a, b) < 0; } }; // I2C device drivers may create a /hwmon subdirectory. For example the tmp75 // driver creates a /sys/bus/i2c/devices/-/hwmon // directory. The sensor code relies on the presence of the /hwmon // subdirectory to collect sensor readings. Initialization of this subdir is // not reliable. I2C devices flagged with hasHWMonDir are tested for correct // initialization, and when a failure is detected the device is deleted, and // then recreated. The default is to retry 5 times before moving to the next // device. // Devices such as I2C EEPROMs do not generate this file structure. These // kinds of devices are flagged using the noHWMonDir enumeration. The // expectation is they are created correctly on the first attempt. // This enumeration class exists to reduce copy/paste errors. It is easy to // overlook the trailing parameter in the ExportTemplate structure when it is // a simple boolean. enum class createsHWMon : bool { noHWMonDir, hasHWMonDir }; struct ExportTemplate { ExportTemplate(const char* params, const char* bus, const char* constructor, const char* destructor, createsHWMon hasHWMonDir) : parameters(params), busPath(bus), add(constructor), remove(destructor), hasHWMonDir(hasHWMonDir) {}; const char* parameters; const char* busPath; const char* add; const char* remove; createsHWMon hasHWMonDir; }; const boost::container::flat_map exportTemplates{ {{"EEPROM_24C01", ExportTemplate("24c01 $Address", "/sys/bus/i2c/devices/i2c-$Bus", "new_device", "delete_device", createsHWMon::noHWMonDir)}, {"EEPROM_24C02", ExportTemplate("24c02 $Address", "/sys/bus/i2c/devices/i2c-$Bus", "new_device", "delete_device", createsHWMon::noHWMonDir)}, {"EEPROM_24C04", ExportTemplate("24c04 $Address", "/sys/bus/i2c/devices/i2c-$Bus", "new_device", "delete_device", createsHWMon::noHWMonDir)}, {"EEPROM_24C08", ExportTemplate("24c08 $Address", "/sys/bus/i2c/devices/i2c-$Bus", "new_device", "delete_device", createsHWMon::noHWMonDir)}, {"EEPROM_24C16", ExportTemplate("24c16 $Address", "/sys/bus/i2c/devices/i2c-$Bus", "new_device", "delete_device", createsHWMon::noHWMonDir)}, {"EEPROM_24C32", ExportTemplate("24c32 $Address", "/sys/bus/i2c/devices/i2c-$Bus", "new_device", "delete_device", createsHWMon::noHWMonDir)}, {"EEPROM_24C64", ExportTemplate("24c64 $Address", "/sys/bus/i2c/devices/i2c-$Bus", "new_device", "delete_device", createsHWMon::noHWMonDir)}, {"EEPROM_24C128", ExportTemplate("24c128 $Address", "/sys/bus/i2c/devices/i2c-$Bus", "new_device", "delete_device", createsHWMon::noHWMonDir)}, {"EEPROM_24C256", ExportTemplate("24c256 $Address", "/sys/bus/i2c/devices/i2c-$Bus", "new_device", "delete_device", createsHWMon::noHWMonDir)}, {"ADS1015", ExportTemplate("ads1015 $Address", "/sys/bus/i2c/devices/i2c-$Bus", "new_device", "delete_device", createsHWMon::noHWMonDir)}, {"ADS7828", ExportTemplate("ads7828 $Address", "/sys/bus/i2c/devices/i2c-$Bus", "new_device", "delete_device", createsHWMon::noHWMonDir)}, {"EEPROM", ExportTemplate("eeprom $Address", "/sys/bus/i2c/devices/i2c-$Bus", "new_device", "delete_device", createsHWMon::noHWMonDir)}, {"Gpio", ExportTemplate("$Index", "/sys/class/gpio", "export", "unexport", createsHWMon::noHWMonDir)}, {"IPSPS1", ExportTemplate("ipsps1 $Address", "/sys/bus/i2c/devices/i2c-$Bus", "new_device", "delete_device", createsHWMon::hasHWMonDir)}, {"MAX34440", ExportTemplate("max34440 $Address", "/sys/bus/i2c/devices/i2c-$Bus", "new_device", "delete_device", createsHWMon::hasHWMonDir)}, {"PCA9537", ExportTemplate("pca9537 $Address", "/sys/bus/i2c/devices/i2c-$Bus", "new_device", "delete_device", createsHWMon::noHWMonDir)}, {"PCA9542Mux", ExportTemplate("pca9542 $Address", "/sys/bus/i2c/devices/i2c-$Bus", "new_device", "delete_device", createsHWMon::noHWMonDir)}, {"PCA9543Mux", ExportTemplate("pca9543 $Address", "/sys/bus/i2c/devices/i2c-$Bus", "new_device", "delete_device", createsHWMon::noHWMonDir)}, {"PCA9544Mux", ExportTemplate("pca9544 $Address", "/sys/bus/i2c/devices/i2c-$Bus", "new_device", "delete_device", createsHWMon::noHWMonDir)}, {"PCA9545Mux", ExportTemplate("pca9545 $Address", "/sys/bus/i2c/devices/i2c-$Bus", "new_device", "delete_device", createsHWMon::noHWMonDir)}, {"PCA9546Mux", ExportTemplate("pca9546 $Address", "/sys/bus/i2c/devices/i2c-$Bus", "new_device", "delete_device", createsHWMon::noHWMonDir)}, {"PCA9547Mux", ExportTemplate("pca9547 $Address", "/sys/bus/i2c/devices/i2c-$Bus", "new_device", "delete_device", createsHWMon::noHWMonDir)}, {"PCA9548Mux", ExportTemplate("pca9548 $Address", "/sys/bus/i2c/devices/i2c-$Bus", "new_device", "delete_device", createsHWMon::noHWMonDir)}, {"PCA9846Mux", ExportTemplate("pca9846 $Address", "/sys/bus/i2c/devices/i2c-$Bus", "new_device", "delete_device", createsHWMon::noHWMonDir)}, {"PCA9847Mux", ExportTemplate("pca9847 $Address", "/sys/bus/i2c/devices/i2c-$Bus", "new_device", "delete_device", createsHWMon::noHWMonDir)}, {"PCA9848Mux", ExportTemplate("pca9848 $Address", "/sys/bus/i2c/devices/i2c-$Bus", "new_device", "delete_device", createsHWMon::noHWMonDir)}, {"PCA9849Mux", ExportTemplate("pca9849 $Address", "/sys/bus/i2c/devices/i2c-$Bus", "new_device", "delete_device", createsHWMon::noHWMonDir)}, {"SIC450", ExportTemplate("sic450 $Address", "/sys/bus/i2c/devices/i2c-$Bus", "new_device", "delete_device", createsHWMon::hasHWMonDir)}, {"Q50SN12072", ExportTemplate("q50sn12072 $Address", "/sys/bus/i2c/devices/i2c-$Bus", "new_device", "delete_device", createsHWMon::hasHWMonDir)}, {"MAX31790", ExportTemplate("max31790 $Address", "/sys/bus/i2c/devices/i2c-$Bus", "new_device", "delete_device", createsHWMon::hasHWMonDir)}, {"PIC32", ExportTemplate("pic32 $Address", "/sys/bus/i2c/devices/i2c-$Bus", "new_device", "delete_device", createsHWMon::hasHWMonDir)}, {"INA226", ExportTemplate("ina226 $Address", "/sys/bus/i2c/devices/i2c-$Bus", "new_device", "delete_device", createsHWMon::hasHWMonDir)}, {"RAA229620", ExportTemplate("raa229620 $Address", "/sys/bus/i2c/devices/i2c-$Bus", "new_device", "delete_device", createsHWMon::hasHWMonDir)}, {"RAA229621", ExportTemplate("raa229621 $Address", "/sys/bus/i2c/devices/i2c-$Bus", "new_device", "delete_device", createsHWMon::hasHWMonDir)}, {"PIC32", ExportTemplate("pic32 $Address", "/sys/bus/i2c/devices/i2c-$Bus", "new_device", "delete_device", createsHWMon::hasHWMonDir)}}}; } // namespace devices