Skip to content
Snippets Groups Projects
Commit 09d34631 authored by dawehr's avatar dawehr
Browse files

Missed files from last commit

parent e6f8920e
No related branches found
No related tags found
1 merge request!8Controller network
Showing with 2 additions and 274 deletions
#include "node_accumulator.h"
#include <stdlib.h>
struct accum_state {
double accumulated;
};
static void accum_nodes(void *state, const double* params, const double *inputs, double *outputs) {
struct accum_state* my_state = (struct accum_state*)state;
my_state->accumulated += inputs[ACCUM_IN];
outputs[ACCUMULATED] = my_state->accumulated;
}
static void reset(void *state) {
((struct accum_state*)state)->accumulated = 0;
}
static const char* const in_names[2] = {"Accumulator in"};
static const char* const out_names[1] = {"Accumulated"};
static const char* const param_names[0] = {};
const struct graph_node_type node_accum_type = {
.input_names = in_names,
.output_names = out_names,
.param_names = param_names,
.n_inputs = 1,
.n_outputs = 1,
.n_params = 0,
.execute = accum_nodes,
.reset = reset
};
int graph_add_node_accum(struct computation_graph *graph, const char* name) {
struct accum_state* node_state = malloc(sizeof(struct accum_state));
if (sizeof(struct accum_state) && !node_state) {
return -1; // malloc failed
}
return graph_add_node(graph, name, &node_accum_type, node_state);
}
#ifndef __NODE_ACCUMULATOR_H__
#define __NODE_ACCUMULATOR_H__
#include "computation_graph.h"
int graph_add_node_accum(struct computation_graph *graph, const char* name);
extern const struct graph_node_type node_accum_type;
enum graph_node_accum_inputs {
ACCUM_IN,
};
enum graph_node_accum_outputs {
ACCUMULATED
};
#endif // __NODE_ACCUMULATOR_H__
\ No newline at end of file
#include "node_add.h"
#include <stdlib.h>
static void add_nodes(void *state, const double* params, const double *inputs, double *outputs) {
outputs[ADD_SUM] = inputs[ADD_SUMMAND1] + inputs[ADD_SUMMAND2];
}
static void reset(void *state) {}
static const char* const in_names[2] = {"Summand 1", "Summand 2"};
static const char* const out_names[1] = {"Sum"};
static const char* const param_names[0] = {};
const struct graph_node_type node_add_type = {
.input_names = in_names,
.output_names = out_names,
.param_names = param_names,
.n_inputs = 2,
.n_outputs = 1,
.n_params = 0,
.execute = add_nodes,
.reset = reset
};
int graph_add_node_add(struct computation_graph *graph, const char* name) {
return graph_add_node(graph, name, &node_add_type, NULL);
}
#ifndef __NODE_ADD_H__
#define __NODE_ADD_H__
#include "computation_graph.h"
int graph_add_node_add(struct computation_graph *graph, const char* name);
extern const struct graph_node_type node_add_type;
enum graph_node_add_inputs {
ADD_SUMMAND1,
ADD_SUMMAND2,
};
enum graph_node_add_outputs {
ADD_SUM
};
#endif // __NODE_ADD_H__
\ No newline at end of file
#include "node_constant.h"
#include <stdlib.h>
static void output_const(void *state, const double *params, const double *inputs, double *outputs) {
outputs[CONST_VAL] = params[CONST_SET];
}
static void reset(void *state) {}
static const char* const in_names[0] = {};
static const char* const out_names[1] = {"Constant"};
static const char* const param_names[1] = {"Constant"};
const struct graph_node_type node_const_type = {
.input_names = in_names,
.output_names = out_names,
.param_names = param_names,
.n_inputs = 0,
.n_outputs = 1,
.n_params = 1,
.execute = output_const,
.reset = reset
};
int graph_add_node_const(struct computation_graph *graph, const char* name) {
return graph_add_node(graph, name, &node_const_type, NULL);
}
#ifndef __NODE_CONSTANT_H__
#define __NODE_CONSTANT_H__
#include "computation_graph.h"
int graph_add_node_const(struct computation_graph *graph, const char* name);
extern const struct graph_node_type node_const_type;
enum graph_node_const_params {
CONST_SET
};
enum graph_node_const_outputs {
CONST_VAL
};
#endif //__NODE_CONSTANT_H__
\ No newline at end of file
#include "node_gain.h"
#include <stdlib.h>
static void scale_nodes(void *state, const double* params, const double *inputs, double *outputs) {
outputs[GAIN_RESULT] = inputs[GAIN_INPUT] * params[GAIN_GAIN];
}
static void reset(void *state) {}
static const char* const in_names[1] = {"Input"};
static const char* const out_names[1] = {"Amplified"};
static const char* const param_names[1] = {"Gain"};
const struct graph_node_type node_gain_type = {
.input_names = in_names,
.output_names = out_names,
.param_names = param_names,
.n_inputs = 1,
.n_outputs = 1,
.n_params = 1,
.execute = scale_nodes,
.reset = reset
};
int graph_add_node_gain(struct computation_graph *graph, const char* name) {
return graph_add_node(graph, name, &node_gain_type, NULL);
}
#ifndef __NODE_GAIN_H__
#define __NODE_GAIN_H__
#include "computation_graph.h"
int graph_add_node_gain(struct computation_graph *graph, const char* name);
extern const struct graph_node_type node_gain_type;
enum graph_node_pow_inputs {
GAIN_INPUT
};
enum graph_node_pow_params {
GAIN_GAIN
};
enum graph_node_gain_outputs {
GAIN_RESULT
};
#endif // __NODE_GAIN_H__
\ No newline at end of file
#include "node_mult.h"
#include <stdlib.h>
static void mult_nodes(void *state, const double* params, const double *inputs, double *outputs) {
outputs[MULT_PRODUCT] = inputs[MULT_MULTIPLICAND1] * inputs[MULT_MULTIPLICAND2];
}
static void reset(void *state) {}
static const char* const in_names[2] = {"Multiplicand 1", "Multiplicand 2"};
static const char* const out_names[1] = {"Product"};
static const char* const param_names[0] = {};
const struct graph_node_type node_mult_type = {
.input_names = in_names,
.output_names = out_names,
.param_names = param_names,
.n_inputs = 2,
.n_outputs = 1,
.n_params = 0,
.execute = mult_nodes,
.reset = reset
};
int graph_add_node_mult(struct computation_graph *graph, const char* name) {
return graph_add_node(graph, name, &node_mult_type, NULL);
}
#ifndef __NODE_MULT_H__
#define __NODE_MULT_H__
#include "computation_graph.h"
int graph_add_node_mult(struct computation_graph *graph, const char* name);
extern const struct graph_node_type node_mult_type;
enum graph_node_mult_inputs {
MULT_MULTIPLICAND1,
MULT_MULTIPLICAND2,
};
enum graph_node_mult_outputs {
MULT_PRODUCT
};
#endif // __NODE_MULT_H__
\ No newline at end of file
#include "node_pow.h"
#include <stdlib.h>
#include <math.h>
static void pow_nodes(void *state, const double* params, const double *inputs, double *outputs) {
outputs[POW_RESULT] = pow(inputs[POW_BASE], params[POW_EXP]);
}
static void reset(void *state) {}
static const char* const in_names[1] = {"Base"};
static const char* const out_names[1] = {"Result"};
static const char* const param_names[1] = {"Exponent"};
const struct graph_node_type node_pow_type = {
.input_names = in_names,
.output_names = out_names,
.param_names = param_names,
.n_inputs = 1,
.n_outputs = 1,
.n_params = 1,
.execute = pow_nodes,
.reset = reset
};
int graph_add_node_pow(struct computation_graph *graph, const char* name) {
return graph_add_node(graph, name, &node_pow_type, NULL);
}
#ifndef __NODE_POW_H__
#define __NODE_POW_H__
#include "computation_graph.h"
int graph_add_node_pow(struct computation_graph *graph, const char* name);
extern const struct graph_node_type node_pow_type;
enum graph_node_pow_inputs {
POW_BASE
};
enum graph_node_pow_params {
POW_EXP
};
enum graph_node_pow_outputs {
POW_RESULT
};
#endif // __NODE_POW_H__
\ No newline at end of file
......@@ -78,10 +78,10 @@ int main()
// Run the control algorithm
control_algorithm(&(structs.log_struct), &(structs.user_input_struct), &(structs.sensor_struct), &(structs.setpoint_struct),
&(structs.parameter_struct), &(structs.user_defined_struct), &(structs.raw_actuator_struct), &structs);
&(structs.parameter_struct), &(structs.user_defined_struct), &(structs.actuator_command_struct), &structs);
// Process the commands going to the actuators
actuator_command_processing(&(structs.log_struct), &(structs.user_input_struct), &(structs.raw_actuator_struct), &(structs.actuator_command_struct));
//actuator_command_processing(&(structs.log_struct), &(structs.user_input_struct), &(structs.raw_actuator_struct), &(structs.actuator_command_struct));
// send the actuator commands
send_actuator_commands(&(structs.log_struct), &(structs.actuator_command_struct));
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment