* Copyright (c) 2025 Huawei Technologies Co., Ltd.
* openUBMC is licensed under Mulan PSL v2.
* You can use this software according to the terms and conditions of the Mulan PSL v2.
* You may obtain a copy of Mulan PSL v2 at:
* http://license.coscl.org.cn/MulanPSL2
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
* See the Mulan PSL v2 for more details.
*/
#include <devmon/driver_abi.h>
#include <mc/log.h>
#include "ina.h"
using namespace dev;
extern "C" {
driver_handle_t create_ina(void* service, const char* name)
{
try {
if (service == nullptr || name == nullptr) {
return nullptr;
}
ina_object* device = new ina_object();
device->set_service(static_cast<mc::engine::service*>(service));
device->set_object_name(name);
return (void*)device;
} catch (const std::exception& e) {
elog("Error creating Ina: ${error}", ("error", e.what()));
return nullptr;
}
}
status_t init_ina(driver_handle_t device, void* csr_object, void* connector)
{
if (device == nullptr || csr_object == nullptr || connector == nullptr) {
elog("Error initializing Ina: invalid parameters");
return STATUS_ERROR;
}
ina_object* device_object = static_cast<ina_object*>(device);
mc::mutable_dict* csr_object_ptr = static_cast<mc::mutable_dict*>(csr_object);
mc::dict* connector_ptr = static_cast<mc::dict*>(connector);
bool ret = device_object->init(*csr_object_ptr, *connector_ptr);
return ret ? STATUS_OK : STATUS_ERROR;
}
status_t start_ina(driver_handle_t device)
{
return STATUS_OK;
}
status_t stop_ina(driver_handle_t device)
{
return STATUS_OK;
}
const char* dump_ina(driver_handle_t device)
{
static thread_local std::string buffer;
buffer.clear();
if (device == nullptr) {
elog("Error dumping pca9555: device is null");
return buffer.c_str();
}
try {
ina_object* device_object = static_cast<ina_object*>(device);
buffer = device_object->dump();
return buffer.c_str();
} catch (const std::exception& e) {
elog("dump_ina failed: ${exception}", ("exception", e.what()));
buffer.clear();
return buffer.c_str();
} catch (...) {
elog("dump_ina failed: unknown exception");
buffer.clear();
return buffer.c_str();
}
}
device_driver_t ina_device_driver = {
.device_name = "Ina", .ctor = create_ina, .init = init_ina, .start = start_ina, .stop = stop_ina, .dump = dump_ina};
device_driver_t ina_device_driver_list[] = {ina_device_driver};
status_t register_device_driver(device_driver_t** device_driver, uint8_t* count)
{
*device_driver = ina_device_driver_list;
*count = sizeof(ina_device_driver_list) / sizeof(ina_device_driver_list[0]);
return STATUS_OK;
}
}