// // Created by Xiang Zhou on 10/6/21. // #pragma once #include #include #include extern "C" { #include "kplus/kp_struct.h" } namespace dynasty { namespace inferencer { namespace kplus { class KplusPlatform { private: bool initialized_; std::shared_ptr device_group_{}; kp_model_nef_descriptor_t nef_{}; kp_product_id_t product_; private: static std::vector collect_all_port_ids(kp_devices_list_t *list, kp_product_id_t target_product); static std::shared_ptr connect_devices(const kp_product_id_t& product); static void upload_firmware(std::shared_ptr devices_group, const std::string& scpu_fw_path, const std::string& ncpu_fw_path); static kp_model_nef_descriptor_t upload_model(std::shared_ptr devices_group, const std::string& _model_file_path_520); public: KplusPlatform(); ~KplusPlatform(); void initialize(const std::string& product, const std::string& nef_file_path, const std::string& scpu_fw_path="", const std::string& ncpu_fw_path="" ); bool isInitialized() const { return initialized_;} std::shared_ptr getDeviceGroup() const { return device_group_;} kp_model_nef_descriptor_t getNeFDesc() const { return nef_; } kp_product_id_t getProduct() const {return product_; } std::string toString() const; }; } } }