13 #include "signal_handler.hh" 15 using scarab::param_array;
16 using scarab::param_node;
17 using scarab::param_ptr_t;
19 LOGGER(
dlog,
"oscillator_service_endpoints" );
40 param_ptr_t t_reply_payload(
new param_node() );
41 param_node& t_reply_node = t_reply_payload->as_node();
42 t_reply_node.add(
"value",
f_osc_svc->oscillator().get_frequency() );
43 return a_request->reply(
dl_success(),
"Get request succeeded", std::move(t_reply_payload) );
48 f_osc_svc->oscillator().set_frequency( a_request->payload()[
"values"][0]().as_double() );
49 return a_request->reply(
dl_success(),
"Frequency set" );
61 param_ptr_t t_reply_payload(
new param_node() );
62 param_node& t_reply_node = t_reply_payload->as_node();
63 t_reply_node.add(
"value",
f_osc_svc->oscillator().get_amplitude() );
64 return a_request->reply(
dl_success(),
"Get request succeeded", std::move(t_reply_payload) );
69 f_osc_svc->oscillator().set_amplitude( a_request->payload()[
"values"][0]().as_double() );
70 return a_request->reply(
dl_success(),
"Frequency set" );
82 param_ptr_t t_reply_payload(
new param_node() );
83 param_node& t_reply_node = t_reply_payload->as_node();
84 t_reply_node.add(
"value",
f_osc_svc->oscillator().in_phase().second );
85 return a_request->reply(
dl_success(),
"Get request succeeded", std::move(t_reply_payload) );
97 param_ptr_t t_reply_payload(
new param_node() );
98 param_node& t_reply_node = t_reply_payload->as_node();
99 t_reply_node.add(
"value",
f_osc_svc->oscillator().quadrature().second );
100 return a_request->reply(
dl_success(),
"Get request succeeded", std::move(t_reply_payload) );
112 param_ptr_t t_reply_payload(
new param_node() );
113 param_node& t_reply_node = t_reply_payload->as_node();
114 param_array t_iq_param;
115 t_iq_param.push_back(
f_osc_svc->oscillator().iq().second.real() );
116 t_iq_param.push_back(
f_osc_svc->oscillator().iq().second.imag() );
117 t_reply_node.add(
"value", std::move(t_iq_param) );
118 return a_request->reply(
dl_success(),
"Get request succeeded", std::move(t_reply_payload) );
123 service( a_config,
"osc_svc_ep" ),
127 add_child( std::make_shared< oscillator_ep_frequency >(
"frequency" ) );
128 add_child( std::make_shared< oscillator_ep_amplitude >(
"amplitude" ) );
129 add_async_child( std::make_shared< oscillator_ep_in_phase >(
"in_phase" ) );
130 add_async_child( std::make_shared< oscillator_ep_quadrature >(
"quadrature" ) );
140 for( async_map_t::iterator t_child_it = f_async_children.begin();
141 t_child_it != f_async_children.end();
145 t_listener_endpoint->endpoint()->service() = shared_from_this();
146 auto t_osc_endpoint = std::static_pointer_cast<
oscillator_ep >(t_listener_endpoint->endpoint());
149 for( sync_map_t::iterator t_child_it = f_sync_children.begin();
150 t_child_it != f_sync_children.end();
153 std::static_pointer_cast<
oscillator_ep >(t_child_it->second)->f_service = shared_from_this();
154 std::static_pointer_cast< oscillator_ep >(t_child_it->second)->f_osc_svc =
this;
161 scarab::signal_handler t_sig_hand;
162 t_sig_hand.add_cancelable(
this );
172 catch( std::exception& e )
174 LERROR(
dlog,
"Exception caught: " << e.what() );
178 if( scarab::signal_handler::get_exited() )
180 f_return = scarab::signal_handler::get_return_code();
virtual ~oscillator_ep_frequency()
virtual ~oscillator_ep_amplitude()
virtual unsigned rc_value() const
std::shared_ptr< msg_request > request_ptr_t
virtual reply_ptr_t do_set_request(const request_ptr_t a_request)
Dripline-specific errors.
virtual reply_ptr_t do_set_request(const request_ptr_t a_request)
virtual reply_ptr_t do_get_request(const request_ptr_t a_request)
bool add_child(endpoint_ptr_t a_endpoint_ptr)
Add a synchronous child endpoint.
oscillator_service_endpoints(const scarab::param_node &a_config=scarab::param_node())
Consumer of Dripline messages on a particular queue.
virtual ~oscillator_ep_quadrature()
oscillator_ep_quadrature(const std::string &a_name)
virtual reply_ptr_t do_get_request(const request_ptr_t a_request)
static scarab::logger dlog("oscillator_service_endpoints")
virtual ~oscillator_service_endpoints()
oscillator_ep_in_phase(const std::string &a_name)
Decorator class for a plain endpoint: adds listener_receiver capabilities.
virtual reply_ptr_t do_get_request(const request_ptr_t a_request)
oscillator_service_endpoints * f_osc_svc
static scarab::logger dlog("agent")
oscillator_ep_frequency(const std::string &a_name)
std::shared_ptr< msg_reply > reply_ptr_t
virtual ~oscillator_ep_iq()
virtual reply_ptr_t do_get_request(const request_ptr_t a_request)
oscillator_ep_iq(const std::string &a_name)
oscillator_ep_amplitude(const std::string &a_name)
bool add_async_child(endpoint_ptr_t a_endpoint_ptr)
Add an asynchronous child endpoint.
Basic Dripline object capable of receiving and acting on messages.
oscillator_ep(const std::string &a_name)
virtual reply_ptr_t do_get_request(const request_ptr_t a_request)
virtual ~oscillator_ep_in_phase()