| #include "fru_area.hpp" |
| |
| #include "frup.hpp" |
| |
| #include <cstdint> |
| #include <cstring> |
| #include <phosphor-logging/log.hpp> |
| |
| using namespace phosphor::logging; |
| |
| //---------------------------------------------------------------- |
| // Constructor |
| //---------------------------------------------------------------- |
| IPMIFruArea::IPMIFruArea(const uint8_t fruid, const ipmi_fru_area_type type, |
| bool bmc_fru) : |
| fruid(fruid), |
| type(type), bmc_fru(bmc_fru) |
| { |
| if (type == IPMI_FRU_AREA_INTERNAL_USE) |
| { |
| name = "INTERNAL_"; |
| } |
| else if (type == IPMI_FRU_AREA_CHASSIS_INFO) |
| { |
| name = "CHASSIS_"; |
| } |
| else if (type == IPMI_FRU_AREA_BOARD_INFO) |
| { |
| name = "BOARD_"; |
| } |
| else if (type == IPMI_FRU_AREA_PRODUCT_INFO) |
| { |
| name = "PRODUCT_"; |
| } |
| else if (type == IPMI_FRU_AREA_MULTI_RECORD) |
| { |
| name = "MULTI_"; |
| } |
| else |
| { |
| name = IPMI_FRU_AREA_TYPE_MAX; |
| log<level::ERR>("Invalid Area", entry("TYPE=%d", type)); |
| } |
| } |
| |
| //----------------------------------------------------- |
| // For a FRU area type, accepts the data and updates |
| // area specific data. |
| //----------------------------------------------------- |
| void IPMIFruArea::setData(const uint8_t* value, const size_t length) |
| { |
| len = length; |
| data = new uint8_t[len]; |
| std::memcpy(data, value, len); |
| } |
| |
| //----------------------------------------------------- |
| // Sets the dbus parameters |
| //----------------------------------------------------- |
| void IPMIFruArea::updateDbusPaths(const char* bus, const char* path, |
| const char* intf) |
| { |
| bus_name = bus; |
| obj_path = path; |
| intf_name = intf; |
| } |
| |
| //------------------- |
| // Destructor |
| //------------------- |
| IPMIFruArea::~IPMIFruArea() |
| { |
| if (data != NULL) |
| { |
| delete[] data; |
| data = NULL; |
| } |
| } |