mux: adapt to the lastest oopt-tai

Signed-off-by: Wataru Ishida <ishida@nel-america.com>
This commit is contained in:
Wataru Ishida
2019-02-05 16:30:22 -08:00
committed by Wataru Ishida
parent 83613ad1f1
commit 76b252a543
8 changed files with 42 additions and 20 deletions

View File

@@ -3,6 +3,7 @@
#include <map>
#include <exception>
#include <sstream>
#include <iostream>
#define LOAD_TAI_API(name) \
m_ ## name = (name ## _fn) dlsym(m_dl, #name); \
@@ -19,6 +20,8 @@ ModuleAdapter::ModuleAdapter(const std::string& name, uint64_t flags, const tai_
LOAD_TAI_API(tai_api_uninitialize)
LOAD_TAI_API(tai_api_query)
LOAD_TAI_API(tai_log_set)
LOAD_TAI_API(tai_object_type_query)
LOAD_TAI_API(tai_module_id_query)
std::stringstream ss;

View File

@@ -40,12 +40,11 @@ class ModuleAdapter {
tai_status_t create_module(
_Out_ tai_object_id_t *module_id,
_In_ uint32_t attr_count,
_In_ const tai_attribute_t *attr_list,
_In_ tai_module_notification_t *notifications) {
_In_ const tai_attribute_t *attr_list) {
if ( m_module_api == nullptr || m_module_api->create_module == nullptr ) {
return TAI_STATUS_FAILURE;
}
return m_module_api->create_module(module_id, attr_count, attr_list, notifications);
return m_module_api->create_module(module_id, attr_count, attr_list);
}
tai_status_t remove_module(

View File

@@ -1,4 +1,5 @@
#include "mux.hpp"
#include <iostream>
Multiplexier *g_mux;
@@ -175,8 +176,7 @@ tai_status_t Multiplexier::get_network_interface_attributes(_In_ tai_object_id_t
tai_status_t Multiplexier::create_module(
_Out_ tai_object_id_t *module_id,
_In_ uint32_t attr_count,
_In_ const tai_attribute_t *attr_list,
_In_ tai_module_notification_t *notifications) {
_In_ const tai_attribute_t *attr_list) {
if ( g_mux == nullptr ) {
return TAI_STATUS_UNINITIALIZED;
}
@@ -195,7 +195,7 @@ tai_status_t Multiplexier::create_module(
tai_object_id_t id;
auto ret = m_adapter->create_module(&id, attr_count, attr_list, notifications);
auto ret = m_adapter->create_module(&id, attr_count, attr_list);
if ( ret != TAI_STATUS_SUCCESS ) {
return ret;
}
@@ -260,10 +260,24 @@ tai_status_t Multiplexier::get_module_attributes(_In_ tai_object_id_t module_id,
return m_adapter->get_module_attributes(id, attr_count, attr_list);
}
tai_object_type_t Multiplexier::object_type_query(_In_ tai_object_id_t id) {
tai_object_id_t realid;
ModuleAdapter *m_adapter;
if ( g_mux == nullptr ) {
return TAI_OBJECT_TYPE_NULL;
}
if ( g_mux->get_mapping(id, &m_adapter, &realid) != 0 ) {
return TAI_OBJECT_TYPE_NULL;
}
return m_adapter->tai_object_type_query(realid);
}
Multiplexier* create_mux(platform_adapter_t pa_kind, uint64_t flags, const tai_service_method_table_t* services) {
try {
return new Multiplexier(pa_kind, flags, services);
} catch (...) {
} catch (const std::runtime_error& e) {
std::cerr << e.what() << std::endl;
return nullptr;
}
}

View File

@@ -56,8 +56,7 @@ class Multiplexier {
tai_status_t create_module(
_Out_ tai_object_id_t *module_id,
_In_ uint32_t attr_count,
_In_ const tai_attribute_t *attr_list,
_In_ tai_module_notification_t *notifications);
_In_ const tai_attribute_t *attr_list);
tai_status_t remove_module(
_In_ tai_object_id_t module_id);
@@ -110,6 +109,9 @@ class Multiplexier {
_In_ uint32_t attr_count,
_Out_ tai_attribute_t *attr_list);
tai_object_type_t object_type_query(
_In_ tai_object_id_t id);
private:
Multiplexier(const Multiplexier&){}
void operator = (const Multiplexier&){}

View File

@@ -18,6 +18,8 @@ StaticPlatformAdapter::StaticPlatformAdapter(uint64_t flags, const tai_service_m
std::map<uint64_t, ModuleAdapter*> map;
auto c = json::parse(config);
m_services.module_presence = nullptr;
for ( json::iterator it = c.begin(); it != c.end(); ++it ) {
auto location = it.key();
auto lib = it.value().get<std::string>();

View File

@@ -1,5 +1,6 @@
#include "mux.hpp"
#include <cstdlib>
#include <iostream>
extern Multiplexier *g_mux;
@@ -148,10 +149,9 @@ tai_network_interface_api_t mux_network_interface_api = {
static tai_status_t mux_create_module(
_Out_ tai_object_id_t *module_id,
_In_ uint32_t attr_count,
_In_ const tai_attribute_t *attr_list,
_In_ tai_module_notification_t *notifications)
_In_ const tai_attribute_t *attr_list)
{
return g_mux->create_module(module_id, attr_count, attr_list, notifications);
return g_mux->create_module(module_id, attr_count, attr_list);
}
static tai_status_t mux_remove_module(_In_ tai_object_id_t module_id)
@@ -223,3 +223,7 @@ tai_status_t tai_api_query(_In_ tai_api_t tai_api_id,
tai_status_t tai_log_set(tai_api_t tai_api_id, tai_log_level_t log_level) {
return TAI_STATUS_SUCCESS;
}
tai_object_type_t tai_object_type_query(tai_object_id_t id) {
return g_mux->object_type_query(id);
}

View File

@@ -18,8 +18,6 @@ tai_module_api_t *module_api;
tai_network_interface_api_t *netif_api;
tai_host_interface_api_t *hostif_api;
tai_module_notification_t notification = {0};
int fd;
std::queue<std::pair<bool, std::string>> q;
std::mutex m;
@@ -67,12 +65,12 @@ int module::create_netif(uint32_t num) {
list.clear();
attr.id = TAI_NETWORK_INTERFACE_ATTR_TX_ENABLE;
attr.value.booldata = true;
attr.id = TAI_NETWORK_INTERFACE_ATTR_TX_DIS;
attr.value.booldata = false;
list.push_back(attr);
attr.id = TAI_NETWORK_INTERFACE_ATTR_TX_CHANNEL;
attr.value.u16 = 10;
attr.id = TAI_NETWORK_INTERFACE_ATTR_TX_LASER_FREQ;
attr.value.u64 = 191300000000000;
list.push_back(attr);
attr.id = TAI_NETWORK_INTERFACE_ATTR_TX_GRID_SPACING;
@@ -125,7 +123,7 @@ tai_status_t create_module(const std::string& location, tai_object_id_t& m_id) {
attr.value.charlist.count = location.size();
attr.value.charlist.list = (char*)location.c_str();
list.push_back(attr);
return module_api->create_module(&m_id, list.size(), list.data(), &notification);
return module_api->create_module(&m_id, list.size(), list.data());
}
int main() {