diff options
author | Claudius 'keldu' Holeksa <mail@keldu.de> | 2024-09-06 16:57:23 +0200 |
---|---|---|
committer | Claudius 'keldu' Holeksa <mail@keldu.de> | 2024-09-06 16:57:23 +0200 |
commit | 001c23fcdb1e881cbcb0532d108218fbdb271cb9 (patch) | |
tree | 2c222029e04696e207da5491da11a15c61318c9f | |
parent | 762cea6f0f8603960e9669d69bc5400c7497a2b5 (diff) |
Working on a data transfer test
-rw-r--r-- | modules/remote-hip/c++/remote.hpp | 8 | ||||
-rw-r--r-- | modules/remote-hip/c++/transfer.hpp | 7 | ||||
-rw-r--r-- | modules/remote-hip/examples/SConscript | 4 | ||||
-rw-r--r-- | modules/remote-hip/examples/hip_transfer_data.cpp | 51 |
4 files changed, 67 insertions, 3 deletions
diff --git a/modules/remote-hip/c++/remote.hpp b/modules/remote-hip/c++/remote.hpp index 7263aaf..b814ff2 100644 --- a/modules/remote-hip/c++/remote.hpp +++ b/modules/remote-hip/c++/remote.hpp @@ -1,6 +1,7 @@ #pragma once #include "common.hpp" +#include "device.hpp" namespace saw { @@ -104,7 +105,12 @@ public: */ template<typename Schema, typename Encoding> error_or<own<data_server<Schema, Encoding, rmt::Hip>>> data_listen(remote_address<rmt::Hip>& dev){ - return heap<data_server<Schema, Encoding, rmt::Hip>>(dev); + our<device<rmt::Hip>> dev = nullptr; + auto ins = devs_.emplace(std::make_pair(dev.get_device_id(), our<device<rmt::Hip>>{nullptr})); + if(ins.second){ + ins.first->second = share<device<rmt::Hip>>(); + } + return heap<data_server<Schema, Encoding, rmt::Hip>>(ins.first->second); } /** diff --git a/modules/remote-hip/c++/transfer.hpp b/modules/remote-hip/c++/transfer.hpp index a81f657..4e76436 100644 --- a/modules/remote-hip/c++/transfer.hpp +++ b/modules/remote-hip/c++/transfer.hpp @@ -22,7 +22,12 @@ public: {} error_or<void> send(const data<Schema,Encoding>& dat, id<Schema> store_id){ - return make_error<err::not_implemented>(); + auto ins = values_.emplace(std::make_pair(store_id.get_value(), data<Schema, encode::Hip<Encoding>>{dat})); + if(!ins.second){ + return make_error<err::already_exists>(); + } + + return make_void(); } error_or<void> allocate(const data<typename meta_schema<Schema>::MetaSchema, Encoding>& dat, id<Schema> store_id){ diff --git a/modules/remote-hip/examples/SConscript b/modules/remote-hip/examples/SConscript index cb9eb65..71bb98f 100644 --- a/modules/remote-hip/examples/SConscript +++ b/modules/remote-hip/examples/SConscript @@ -29,8 +29,10 @@ hip_objects = []; #objects_static = [] examples_env.hip_info = examples_hip_env.Program('#bin/hip_device_info', ['hip_device_info.cpp', env.library_static, hip_objects]); +examples_env.hip_transfer = examples_hip_env.Program('#bin/hip_transfer_data', ['hip_transfer_data.cpp', env.library_static, hip_objects]); + # Set Alias -env.examples = [examples_env.hip_info]; +env.examples = [examples_env.hip_info, examples_env.hip_transfer]; env.Alias('examples', env.examples); if env["build_examples"]: diff --git a/modules/remote-hip/examples/hip_transfer_data.cpp b/modules/remote-hip/examples/hip_transfer_data.cpp new file mode 100644 index 0000000..49ff856 --- /dev/null +++ b/modules/remote-hip/examples/hip_transfer_data.cpp @@ -0,0 +1,51 @@ +#include "../c++/remote.hpp" +#include "../c++/transfer.hpp" + +#include <iostream> + +namespace sch { +using namespace saw::schema; +} + +saw::error_or<void> real_main(){ + using namespace saw; + + remote<rmt::Hip> rmt; + + auto eo_addr = rmt.parse_address(0); + if(eo_addr.is_error()){ + return std::move(eo_addr.get_error()); + } + auto& addr = eo_addr.get_value(); + + auto eo_dat_srv = rmt.data_listen<sch::Int16, encode::Native>(*addr); + if(eo_dat_srv.is_error()){ + return std::move(eo_dat_srv.get_error()); + } + auto& dat_srv = eo_dat_srv.get_value(); + + data<sch::Int16> val{42}; + + id<sch::Int16> id_val{0u}; + auto eo_send = dat_srv->send(val, id_val); + if(eo_send.is_error()){ + return std::move(eo_send.get_error()); + } + + return make_void(); +} + +int main(){ + auto eov = real_main(); + if(eov.is_error()){ + auto& err = eov.get_error(); + std::cerr<<"Error: "<<err.get_category(); + auto err_msg = err.get_message(); + if(err_msg.size() > 0u){ + std::cerr<<" - "<<err_msg; + } + std::cerr<<"\n"<<std::endl; + return err.get_id(); + } + return 0; +} |