Skip to content

Commit

Permalink
added autoupdate to chain.metric and tod to chain.time
Browse files Browse the repository at this point in the history
  • Loading branch information
eflynch committed Dec 9, 2015
1 parent 0549983 commit 013f9bd
Show file tree
Hide file tree
Showing 11 changed files with 507 additions and 17 deletions.
2 changes: 1 addition & 1 deletion Makefile
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
PROJECTS = chain.info chain.site chain.test chain.device chain.metric chain.zone chain.map chain.time chain.data
PROJECTS = chain.info chain.site chain.test chain.device chain.metric chain.zone chain.map chain.time chain.data chain.param

all:
for project in $(PROJECTS) ; do \
Expand Down
76 changes: 63 additions & 13 deletions chain.metric/chain.metric.c
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ void chain_metric_pos(t_chain_metric *x, t_symbol *s, long argc, t_atom *argv);

// Notify
void chain_metric_notify(t_chain_metric *x, t_symbol *s, t_symbol *msg, void *sender, void *data);
void chain_metric_cache_sensor_list(t_chain_metric *x);

void chain_metric_send_mean(t_chain_metric *x);
void chain_metric_send_std(t_chain_metric *x);
Expand Down Expand Up @@ -59,6 +60,8 @@ int C74_EXPORT main(void)
CLASS_ATTR_FLOAT(c, "pos_z", 0, t_chain_metric, s_pos_z);
CLASS_ATTR_FLOAT(c, "radius", 0, t_chain_metric, s_radius);

CLASS_ATTR_LONG(c, "autoupdate", 0L, t_chain_metric, s_autoupdate);

class_register(CLASS_BOX, c);

ps_url = gensym("url");
Expand Down Expand Up @@ -94,8 +97,13 @@ void *chain_metric_new(t_symbol *s, long argc, t_atom *argv)
x->s_measure = ps_mean;
x->s_interp = ps_proximal;

x->s_autoupdate = 0;
x->s_sensor_list_size = 0;

attr_args_process(x, argc, argv);

chain_metric_cache_sensor_list(x);

x->s_outlet = outlet_new(x, NULL);

return x;
Expand All @@ -104,17 +112,59 @@ void *chain_metric_new(t_symbol *s, long argc, t_atom *argv)
void chain_metric_free(t_chain_metric *x)
{
chain_worker_release_site((t_chain_worker *)x);
if (x->s_sensor_list){
free(x->s_sensor_list);
}
}

void chain_metric_notify(t_chain_metric *x, t_symbol *s, t_symbol *msg, void *sender, void *data)
{
if (s == x->s_worker.s_site_name && x->s_autoupdate){
int do_it = false;
for (int i=0; i < x->s_sensor_list_size; i++){
if (msg == x->s_sensor_list[i]){
do_it = true;
break;
}
}
if (do_it){
chain_metric_bang(x);
}
}

chain_worker_notify((t_chain_worker *)x, s, msg, sender, data);
}

void chain_metric_int(t_chain_metric *x, long n)
{
}

void chain_metric_cache_sensor_list(t_chain_metric *x)
{
if (!x->s_worker.s_db || !x->s_metric_name){
return;
}

t_db_result *db_result = NULL;
if (x->s_radius > 0.0){
query_near_data_by_metric_name(x->s_worker.s_db, x->s_pos_x,
x->s_pos_z, x->s_radius, x->s_metric_name->s_name, &db_result);
} else {
query_data_by_metric_name(x->s_worker.s_db, x->s_metric_name->s_name, &db_result);
}
long num_results = db_result_numrecords(db_result);
if (x->s_sensor_list){
free(x->s_sensor_list);
x->s_sensor_list = NULL;
}
x->s_sensor_list = malloc(sizeof(*x->s_sensor_list) * num_results);
for (int i=0; i < num_results; i++){
*(x->s_sensor_list) = gensym(db_result_string(db_result, i, 3));
}
x->s_sensor_list_size = num_results;
object_free(db_result);
}

void chain_metric_bang(t_chain_metric *x)
{
if (!x->s_worker.s_db){
Expand All @@ -132,6 +182,8 @@ void chain_metric_bang(t_chain_metric *x)
return;
}

chain_metric_cache_sensor_list(x);

if (x->s_measure == ps_mean){
chain_metric_send_mean(x);
} else if (x->s_measure == ps_std){
Expand Down Expand Up @@ -162,7 +214,7 @@ void chain_metric_send_mean(t_chain_metric *x)
t_db_result *db_result = NULL;
if (x->s_radius > 0.0){
query_near_data_by_metric_name(x->s_worker.s_db, x->s_pos_x,
x->s_pos_z, x->s_radius, x->s_metric_name->s_name, &db_result);
x->s_pos_z, x->s_radius, x->s_metric_name->s_name, &db_result);
} else {
query_data_by_metric_name(x->s_worker.s_db, x->s_metric_name->s_name, &db_result);
}
Expand Down Expand Up @@ -199,14 +251,13 @@ void chain_metric_send_deviation(t_chain_metric *x){
} else if (x->s_interp == ps_proximal){
t_db_result *db_result = NULL;

// This is basically a hack ... TODO: make this not a hack
double radius = x->s_radius;
if (radius <= 0.0){
radius = 1000000.0;
if (x->s_radius > 0.0){
query_near_data_by_metric_name(x->s_worker.s_db, x->s_pos_x,
x->s_pos_z, x->s_radius, x->s_metric_name->s_name, &db_result);
} else {
query_data_by_metric_name(x->s_worker.s_db, x->s_metric_name->s_name, &db_result);
}

query_near_data_by_metric_name(x->s_worker.s_db, x->s_pos_x,
x->s_pos_z, radius, x->s_metric_name->s_name, &db_result);
double *argv;
long argc;
chain_metric_unpack_values(db_result, &argv, &argc);
Expand All @@ -226,14 +277,13 @@ void chain_metric_send_interpolation(t_chain_metric *x){
} else if (x->s_interp == ps_proximal){
t_db_result *db_result = NULL;

// This is basically a hack ... TODO: make this not a hack
double radius = x->s_radius;
if (radius <= 0.0){
radius = 1000000.0;
if (x->s_radius > 0.0){
query_near_data_by_metric_name(x->s_worker.s_db, x->s_pos_x,
x->s_pos_z, x->s_radius, x->s_metric_name->s_name, &db_result);
} else {
query_data_by_metric_name(x->s_worker.s_db, x->s_metric_name->s_name, &db_result);
}

query_near_data_by_metric_name(x->s_worker.s_db, x->s_pos_x,
x->s_pos_z, radius, x->s_metric_name->s_name, &db_result);
double *argv;
long argc;
chain_metric_unpack_values(db_result, &argv, &argc);
Expand Down
3 changes: 3 additions & 0 deletions chain.metric/chain.metric.h
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,9 @@ typedef struct chain_metric
t_symbol *s_metric_name;
t_symbol *s_measure;
t_symbol *s_interp;
t_symbol **s_sensor_list;
long s_sensor_list_size;
long s_autoupdate;
float s_pos_x;
float s_pos_y;
float s_pos_z;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
{
"DVTSourceControlWorkspaceBlueprintPrimaryRemoteRepositoryKey" : "F313BF58AD01FBAD7BC8970A98185CE896BD9271",
"DVTSourceControlWorkspaceBlueprintWorkingCopyRepositoryLocationsKey" : {

},
"DVTSourceControlWorkspaceBlueprintWorkingCopyStatesKey" : {
"43DDD4A1012A81E5C2F5DA96FCA0DABF5263B8FC" : 0,
"F313BF58AD01FBAD7BC8970A98185CE896BD9271" : 0
},
"DVTSourceControlWorkspaceBlueprintIdentifierKey" : "23230EEA-1D85-4B67-9E92-EAABA64D35EB",
"DVTSourceControlWorkspaceBlueprintWorkingCopyPathsKey" : {
"43DDD4A1012A81E5C2F5DA96FCA0DABF5263B8FC" : "maxchain\/max6-sdk",
"F313BF58AD01FBAD7BC8970A98185CE896BD9271" : "maxchain"
},
"DVTSourceControlWorkspaceBlueprintNameKey" : "chain.metric",
"DVTSourceControlWorkspaceBlueprintVersion" : 204,
"DVTSourceControlWorkspaceBlueprintRelativePathToProjectKey" : "chain.metric\/chain.metric.xcodeproj",
"DVTSourceControlWorkspaceBlueprintRemoteRepositoriesKey" : [
{
"DVTSourceControlWorkspaceBlueprintRemoteRepositoryURLKey" : "github.com:Cycling74\/max6-sdk",
"DVTSourceControlWorkspaceBlueprintRemoteRepositorySystemKey" : "com.apple.dt.Xcode.sourcecontrol.Git",
"DVTSourceControlWorkspaceBlueprintRemoteRepositoryIdentifierKey" : "43DDD4A1012A81E5C2F5DA96FCA0DABF5263B8FC"
},
{
"DVTSourceControlWorkspaceBlueprintRemoteRepositoryURLKey" : "github.com:eflynch\/maxchain.git",
"DVTSourceControlWorkspaceBlueprintRemoteRepositorySystemKey" : "com.apple.dt.Xcode.sourcecontrol.Git",
"DVTSourceControlWorkspaceBlueprintRemoteRepositoryIdentifierKey" : "F313BF58AD01FBAD7BC8970A98185CE896BD9271"
}
]
}
101 changes: 101 additions & 0 deletions chain.param/chain.param.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
/**
@file
chain.param - a simple chain_param object
@ingroup maxchain
*/

#include "ext.h"
#include "ext_common.h"
#include "ext_dictobj.h"
#include "ext_database.h"
#include "ext_path.h"

#include "messages.h"
#include "queries.h"
#include "chainworker.h"

typedef struct chain_param
{
t_chain_worker s_worker;
t_symbol *s_filename;
void *s_outlet;
} t_chain_param;

// Create + Destroy
void *chain_param_new(t_symbol *s, long argc, t_atom *argv);
void chain_param_free(t_chain_param *x);


// Methods
void chain_param_int(t_chain_param *x, long n);
void chain_param_bang(t_chain_param *x);

// Attribute Setters
void chain_param_set_site_name(t_chain_param *x, void *attr, long argc, t_atom *argv);

// Notify
void chain_param_notify(t_chain_param *x, t_symbol *s, t_symbol *msg, void *sender, void *data);

static t_class *s_chain_param_class = NULL;

t_symbol *ps_url, *ps_name, *ps_devices, *ps_metrics;

int C74_EXPORT main(void)
{
t_class *c;

c = class_new("chain.param", (method)chain_param_new, (method)chain_param_free, sizeof(t_chain_param), (method)0L, A_GIMME, 0);

class_addmethod(c, (method)chain_param_bang, "bang", 0);
class_addmethod(c, (method)chain_param_int, "int", A_LONG, 0);
class_addmethod(c, (method)chain_param_notify, "notify", A_CANT, 0);

CLASS_ATTR_SYM(c, "name", ATTR_SET_OPAQUE_USER, t_chain_param, s_worker.s_site_name);

class_register(CLASS_BOX, c);

ps_url = gensym("url");
ps_name = gensym("name");
ps_metrics = gensym("metrics");
ps_devices = gensym("devices");

s_chain_param_class = c;

return 0;
}

void *chain_param_new(t_symbol *s, long argc, t_atom *argv)
{
t_chain_param *x = (t_chain_param *)object_alloc(s_chain_param_class);

chain_worker_new((t_chain_worker *)x, s, argc, argv);

attr_args_process(x, argc, argv);

x->s_outlet = outlet_new(x, NULL);

return x;
}

void chain_param_free(t_chain_param *x)
{
chain_worker_release_site((t_chain_worker *)x);
}


void chain_param_notify(t_chain_param *x, t_symbol *s, t_symbol *msg, void *sender, void *data)
{
chain_worker_notify((t_chain_worker *)x, s, msg, sender, data);
}

void chain_param_int(t_chain_param *x, long n)
{
}

void chain_param_bang(t_chain_param *x)
{
}



Loading

0 comments on commit 013f9bd

Please sign in to comment.