122 lines
5.7 KiB
C++
122 lines
5.7 KiB
C++
#pragma once
|
|
#include <map>
|
|
#include <queue>
|
|
#include <any>
|
|
#include "sock_client.h"
|
|
#include "../common/protocol_commands.h"
|
|
|
|
enum class state
|
|
{
|
|
disconnected,
|
|
connected,
|
|
logged_in
|
|
};
|
|
|
|
class system_client
|
|
{
|
|
public:
|
|
system_client(const std::string & unix_file, std::function<void(const std::string&)> log_func = nullptr);
|
|
~system_client();
|
|
|
|
state get_current_state() const;
|
|
|
|
response_type send_login_cmd (const std::string & username, const std::string & pass, access_rights & access);
|
|
response_type send_logout_cmd ();
|
|
response_type send_ping_cmd (const std::string & ip, size_t count);
|
|
response_type send_traceroute_cmd (const std::string & ip);
|
|
response_type send_show_interface_cmd(const interface_value & interface);
|
|
response_type send_copy_cmd (const fm::side_description & src, const fm::side_description & dst);
|
|
|
|
response_type send_set_dem_freq_cmd(uint32_t freq);
|
|
response_type send_get_dem_freq_cmd(uint32_t & freq);
|
|
|
|
response_type send_set_gain_param (const gain_value & interface_gain, double gain);
|
|
response_type send_get_gain_param (const gain_value & interface_gain, double & gain);
|
|
response_type send_radio_enable (const cmd_radio & enable_choice, bool enbl_);
|
|
response_type send_modulator_param(const modulator_value & mod_val, uint32_t value);
|
|
response_type send_get_modulator_param(const modulator_value & mod_val, uint32_t &value);
|
|
response_type send_set_demodulator_param(const demodulator_value & demod_val, uint32_t value);
|
|
response_type send_get_demodulator_param(const getdemodulator_value & demod_val, uint32_t &value);
|
|
response_type send_zynq_cmd(const zynq_value & zynq_val, double & value);
|
|
response_type send_network_settings(const network_value & cmd_netw, const std::string & value);
|
|
response_type send_get_network_settings(const network_value & cmd_netw, std::string & value);
|
|
response_type send_rollof_and_baudrate(double & rollof, double &baudrate);
|
|
response_type send_get_level_dem(const cmd_level_dem & lvl_dem_val, double &value);
|
|
response_type send_get_dma_debug(const cmd_get_dma_debugg_enum & dma_debug, std::string &value);
|
|
response_type send_set_10g_config(const cmd_10g_config & _10g_config, std::string &value);
|
|
response_type send_set_dma_debug(const cmd_dma_debugg & dma_debugg, std::string &value);
|
|
response_type send_set_acm_params(const ACM_parameters_serv &acm_params);
|
|
response_type send_get_acm_params(cmd_get_acm_param &acm_params);
|
|
|
|
response_type send_get_demodulator_state(demodulator_state_com &demodulator_state);
|
|
response_type send_get_modulator_state(modulator_state_com &modulator_state);
|
|
|
|
response_type send_get_device_state(device_state_com &device_state);
|
|
response_type send_get_cinc_state(CinC_state_com &cinc_state);
|
|
|
|
response_type send_set_modulator_settings(modulator_settings_com &settings);
|
|
response_type send_set_demodulator_settings(demodulator_settings_com &settings);
|
|
response_type send_get_modulator_settings(modulator_settings_com &settings);
|
|
response_type send_get_demodulator_settings(demodulator_settings_com &settings);
|
|
|
|
response_type send_set_buc_lnb_settings(buc_lnb_settings_com &settings);
|
|
response_type send_get_buc_lnb_settings(buc_lnb_settings_com &settings);
|
|
|
|
response_type send_set_dpdi_params(dpdi_parameters &dpdi_params);
|
|
response_type send_get_dpdi_params(dpdi_parameters &dpdi_params);
|
|
|
|
response_type send_set_lbq_params(const uint32_t & tick_ms, const uint32_t & bucket_size);
|
|
|
|
response_type send_set_qos_params(const std::string &node, const name_classes_qos & class_qos);
|
|
response_type send_get_qos_params(std::string &node, const name_classes_qos & class_qos);
|
|
|
|
response_type send_set_qos_settings_json(const std::string &json_string, bool is_enable);
|
|
response_type send_get_qos_settings_json(std::string &json_string, bool &is_enable);
|
|
|
|
void set_stdout_callback(std::function<void(const char *, uint32_t)> cb);
|
|
void abort();
|
|
|
|
private:
|
|
system_client(const system_client&) = delete;
|
|
const system_client& operator=(const system_client&) = delete;
|
|
|
|
boost::asio::io_context io_context;
|
|
client clt;
|
|
std::function<void(const std::string&)> log;
|
|
std::thread ctx_thread;
|
|
std::atomic<uint32_t> cmd_id;
|
|
|
|
std::mutex cb_mtx;
|
|
std::function<void(const char *, uint32_t len)> stdout_cb;
|
|
|
|
std::mutex responses_mtx;
|
|
std::map<uint32_t, std::queue<response_type>> responses;
|
|
std::map<uint32_t, std::queue<std::any>> responses_data;
|
|
std::condition_variable cv_resp;
|
|
|
|
state current_state;
|
|
|
|
std::mutex cmd_in_progress_mtx;
|
|
|
|
response_type wait_for_response (uint32_t id, const cmd_type & type, std::any & data);
|
|
response_type wait_for_progressing_response(uint32_t c_id, const cmd_type & cmd_t);
|
|
void process_response (uint32_t id, response_type resp, std::any && data);
|
|
void data_received (const std::vector<uint8_t> & data);
|
|
void send_abort (uint32_t id);
|
|
|
|
template<typename... Args>
|
|
void send_to_socket(Args&&... args)
|
|
{
|
|
//TO-DO: need case for empty parameter pack?
|
|
std::stringstream s;
|
|
s << std::noskipws;
|
|
{
|
|
cereal::BinaryOutputArchive oarchive(s);
|
|
oarchive(std::forward<Args>(args)...);
|
|
}
|
|
std::vector<uint8_t> data((std::istream_iterator<uint8_t>(s)), std::istream_iterator<uint8_t>());
|
|
clt.write(data);
|
|
|
|
}
|
|
};
|