Navigation

core.cont.mode_switch2

Inputs

Name

Type

Title

Mandatory

Description

input

core.type.f64

Source signal

True

None

Outputs

Name

Type

Title

Description

mode1

core.type.bool

Mode 1

None

mode2

core.type.bool

Mode 1

None

Parameters

Function has no parameters

State variables

Function has no state variables

Usage XML code snippet

core_cont_mode_switch2 snippet for FLOW configuration file
<f name="mode_switch2" by_spec="core.cont.mode_switch2"> <in alias="input">some_block_1/output</in> </f> 

Function’s artifacts

declaration.py
from fspeclib import * Function( name='core.cont.mode_switch2', title=LocalizedString( en='Discrete 2 mode switcher from proportional signal' ), description=None, inputs=[ Input( name='input', title='Source signal', value_type='core.type.f64' ), ], outputs=[ Output( name='mode1', title='Mode 1', value_type='core.type.bool' ), Output( name='mode2', title='Mode 1', value_type='core.type.bool' ) ] ) 
core_cont_mode_switch2_exec.c
#include "core_cont_mode_switch2.h" void core_cont_mode_switch2_exec(const core_cont_mode_switch2_inputs_t *i, core_cont_mode_switch2_outputs_t *o){  o->mode1 = i->input > 0.3 ? TRUE : FALSE;  o->mode2 = i->input > 0.7 ? TRUE : FALSE; } 
core_cont_mode_switch2.h
/**  * Automatically-generated file. Do not edit!  */ #ifndef FSPEC_CORE_CONT_MODE_SWITCH2_H #define FSPEC_CORE_CONT_MODE_SWITCH2_H #include <stdint.h> #include <eswb/types.h> #include "function.h" /* Include declaration of dependency types */ #include "core_type_bool.h" #include "core_type_f64.h" /**  * @brief Inputs of `core.cont.mode_switch2` function  */ typedef struct core_cont_mode_switch2_inputs_ {  core_type_f64_t input; /// Source signal } core_cont_mode_switch2_inputs_t; /**  * @brief Outputs of `core.cont.mode_switch2` function  */ typedef struct core_cont_mode_switch2_outputs_ {  core_type_bool_t mode1; /// Mode 1  core_type_bool_t mode2; /// Mode 1 } core_cont_mode_switch2_outputs_t; typedef struct core_cont_mode_switch2_eswb_descriptors_ {  eswb_topic_descr_t in_input;  eswb_topic_descr_t out_all; } core_cont_mode_switch2_eswb_descriptors_t; typedef struct core_cont_mode_switch2_interface_ {  core_cont_mode_switch2_inputs_t i;  core_cont_mode_switch2_outputs_t o;  core_cont_mode_switch2_eswb_descriptors_t eswb_descriptors; } core_cont_mode_switch2_interface_t; void core_cont_mode_switch2_exec(const core_cont_mode_switch2_inputs_t *i, core_cont_mode_switch2_outputs_t *o); #endif // FSPEC_CORE_CONT_MODE_SWITCH2_H 
core_cont_mode_switch2_spec.c
/**  * Automatically-generated file. Do not edit!  */ #include "core_cont_mode_switch2.h" #include <eswb/types.h> static const param_spec_t *params[1] = {  NULL }; static const input_spec_t i_input = {  .name = "input",  .annotation = "Source signal",  .flags = 0 }; static const input_spec_t *inputs[2] = {  &i_input,  NULL }; static const output_spec_t o_mode1 = {  .name = "mode1",  .annotation = "Mode 1",  .flags = 0 }; static const output_spec_t o_mode2 = {  .name = "mode2",  .annotation = "Mode 1",  .flags = 0 }; static const output_spec_t *outputs[3] = {  &o_mode1,  &o_mode2,  NULL }; fspec_rv_t core_cont_mode_switch2_call_init_inputs(  void *dh,  const func_conn_spec_t *conn_spec,  eswb_topic_descr_t mounting_td ); fspec_rv_t core_cont_mode_switch2_call_init_outputs(  void *dh,  const func_conn_spec_t *conn_spec,  eswb_topic_descr_t mounting_td,  const char *func_name ); void core_cont_mode_switch2_call_exec(void *dh); const function_spec_t atomic_core_cont_mode_switch2_spec = {  .name = "core.cont.mode_switch2",  .annotation = "Discrete 2 mode switcher from proportional signal",  .inputs = inputs,  .outputs = outputs,  .params = params }; const function_calls_t atomic_core_cont_mode_switch2_calls = {  .interface_handle_size = sizeof(core_cont_mode_switch2_interface_t),  .init = NULL,  .init_inputs = core_cont_mode_switch2_call_init_inputs,  .init_outputs = core_cont_mode_switch2_call_init_outputs,  .pre_exec_init = NULL,  .exec = core_cont_mode_switch2_call_exec,  .set_params = NULL }; const function_handler_t atomic_core_cont_mode_switch2_handler = {  .spec = &atomic_core_cont_mode_switch2_spec,  .calls = &atomic_core_cont_mode_switch2_calls,  .extension_handler = NULL }; 
core_cont_mode_switch2_interface.c
/**  * Automatically-generated file. Do not edit!  */ #include "core_cont_mode_switch2.h" #include "error.h" #include <eswb/api.h> #include <eswb/topic_proclaiming_tree.h> #include <eswb/errors.h> int core_cont_mode_switch2_interface_inputs_init(  core_cont_mode_switch2_interface_t *interface,  const func_conn_spec_t *conn_spec,  eswb_topic_descr_t mounting_td ) {  eswb_rv_t rv;  int errcnt_no_topic = 0;  int errcnt_no_input = 0;  const char *topic_path_in_input = fspec_find_path2connect(conn_spec,"input");  // Connecting mandatory input "input"  if (topic_path_in_input != NULL) {  rv = eswb_connect_nested(mounting_td, topic_path_in_input, &interface->eswb_descriptors.in_input);  if(rv != eswb_e_ok) {  error("failed connect input \"input\" to topic \"%s\": %s", topic_path_in_input, eswb_strerror(rv));  errcnt_no_topic++;  }  } else {  error("mandatory input \"input\" is not speicifed");  errcnt_no_input++;  }  if ((errcnt_no_input > 0) || (errcnt_no_topic > 0)) {  if (errcnt_no_input > errcnt_no_topic) {  return fspec_rv_no_input;  } else {  return fspec_rv_no_topic;  }  }  return fspec_rv_ok; } fspec_rv_t core_cont_mode_switch2_interface_inputs_update(core_cont_mode_switch2_interface_t *interface) {  eswb_rv_t rv;  rv = eswb_read(interface->eswb_descriptors.in_input, &interface->i.input);  if(rv != eswb_e_ok) {  /*FIXME nothing to do yet*/  }  return 0; } fspec_rv_t core_cont_mode_switch2_interface_outputs_init(  core_cont_mode_switch2_interface_t *interface,  const func_conn_spec_t *conn_spec,  eswb_topic_descr_t mounting_td,  const char *func_name ) {  TOPIC_TREE_CONTEXT_LOCAL_DEFINE(cntx, 3);  core_cont_mode_switch2_outputs_t out;  eswb_rv_t rv;  topic_proclaiming_tree_t *rt = usr_topic_set_struct(cntx, out, func_name);  usr_topic_add_struct_child(cntx, rt, core_cont_mode_switch2_outputs_t, mode1, "mode1", tt_int32);  usr_topic_add_struct_child(cntx, rt, core_cont_mode_switch2_outputs_t, mode2, "mode2", tt_int32);  rv = eswb_proclaim_tree(mounting_td, rt, cntx->t_num, &interface->eswb_descriptors.out_all);  if (rv != eswb_e_ok) {  return fspec_rv_publish_err;  }  return fspec_rv_ok; } fspec_rv_t core_cont_mode_switch2_interface_outputs_update(core_cont_mode_switch2_interface_t *interface) {  eswb_rv_t rv;  rv = eswb_update_topic(interface->eswb_descriptors.out_all, &interface->o);  if (rv != eswb_e_ok) {  return 1;  }  return 0; } void core_cont_mode_switch2_interface_update(core_cont_mode_switch2_interface_t *interface) {  core_cont_mode_switch2_interface_inputs_update(interface);  core_cont_mode_switch2_exec(&interface->i, &interface->o);  core_cont_mode_switch2_interface_outputs_update(interface); } fspec_rv_t core_cont_mode_switch2_call_init_inputs(  void *dh,  const func_conn_spec_t *conn_spec,  eswb_topic_descr_t mounting_td ) {  core_cont_mode_switch2_interface_t *interface = (core_cont_mode_switch2_interface_t*) dh;  return core_cont_mode_switch2_interface_inputs_init(interface, conn_spec, mounting_td); } fspec_rv_t core_cont_mode_switch2_call_init_outputs(  void *dh,  const func_conn_spec_t *conn_spec,  eswb_topic_descr_t mounting_td,  const char *func_name ) {  core_cont_mode_switch2_interface_t *interface = (core_cont_mode_switch2_interface_t*) dh;  return core_cont_mode_switch2_interface_outputs_init(interface, conn_spec, mounting_td, func_name); } void core_cont_mode_switch2_call_exec(void *dh) {  core_cont_mode_switch2_interface_t *interface = (core_cont_mode_switch2_interface_t*) dh;  core_cont_mode_switch2_interface_update(interface); }