Skip to content

Commit

Permalink
Update registerDefaultConfig()
Browse files Browse the repository at this point in the history
This patch changes the registerDefaultConfig() function to receive
events as optional parameters and adds a new function to get value
type from sensor id.
  • Loading branch information
alla3 authored and cktakahasi committed Nov 7, 2018
1 parent 3680706 commit 6b76300
Show file tree
Hide file tree
Showing 8 changed files with 79 additions and 20 deletions.
4 changes: 2 additions & 2 deletions examples/BeamSensor/BeamSensor.ino
Original file line number Diff line number Diff line change
Expand Up @@ -57,9 +57,9 @@ void setup()
beam_read_2, NULL);

/*Every time the Beam sensor changes its value, it send data*/
thing.registerDefaultConfig(BEAM_SENSOR_1_ID, KNOT_EVT_FLAG_CHANGE, 0, 0, 0, 0, 0);
thing.registerDefaultConfig(BEAM_SENSOR_1_ID, KNOT_EVT_FLAG_CHANGE, NULL);

thing.registerDefaultConfig(BEAM_SENSOR_2_ID, KNOT_EVT_FLAG_CHANGE, 0, 0, 0, 0, 0);
thing.registerDefaultConfig(BEAM_SENSOR_2_ID, KNOT_EVT_FLAG_CHANGE, NULL);

Serial.println(F("Beam Sensor KNoT Demo"));
}
Expand Down
4 changes: 2 additions & 2 deletions examples/HelloWorld/HelloWorld.ino
Original file line number Diff line number Diff line change
Expand Up @@ -116,8 +116,8 @@ void setup(void)

/* Send data every 30 seconds */
thing.registerDefaultConfig(LED_ID,
KNOT_EVT_FLAG_TIME | KNOT_EVT_FLAG_CHANGE,
30,0, 0, 0, 0);
KNOT_EVT_FLAG_TIME, 30,
KNOT_EVT_FLAG_CHANGE, NULL);

/* Print thing name via Serial */
Serial.println(F(THING_NAME));
Expand Down
2 changes: 1 addition & 1 deletion examples/Light/Light.ino
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ void setup()
KNOT_UNIT_NOT_APPLICABLE, light_read, light_write);

/* Send data every 10 seconds*/
thing.registerDefaultConfig(LIGHT_BULB_ID, KNOT_EVT_FLAG_TIME, 10, 0, 0, 0, 0);
thing.registerDefaultConfig(LIGHT_BULB_ID, KNOT_EVT_FLAG_TIME, 10, NULL);

Serial.println(F("Remote Light Bulb KNoT Demo"));
}
Expand Down
2 changes: 1 addition & 1 deletion examples/WaterDispenser/WaterDispenser.ino
Original file line number Diff line number Diff line change
Expand Up @@ -127,7 +127,7 @@ void setup(void)
KNOT_UNIT_MASS_G, scale_read, scale_write);

/*Send data when value is less than 1000*/
thing.registerDefaultConfig(SCALE_ID, KNOT_EVT_FLAG_LOWER_THRESHOLD, 0, 0, 0, 1000, 0);
thing.registerDefaultConfig(SCALE_ID, KNOT_EVT_FLAG_LOWER_THRESHOLD, 1000, NULL);

/* Read offset from EEPROM */
EEPROM.get(OFFSET_ADDR, offset);
Expand Down
70 changes: 59 additions & 11 deletions src/KNoTThing.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
*/

#include <stdint.h>
#include <stdarg.h>

#include "KNoTThing.h"

Expand Down Expand Up @@ -81,18 +82,65 @@ void KNoTThing::run()
knot_thing_run();
}

int KNoTThing::registerDefaultConfig(uint8_t sensor_id, uint8_t event_flags,
uint16_t time_sec, int32_t upper_int, uint32_t upper_dec,
int32_t lower_int, uint32_t lower_dec)
int KNoTThing::registerDefaultConfig(uint8_t sensor_id, ...)
{
knot_value_type lower;
knot_value_type upper;

lower.val_f.value_int = lower_int;
lower.val_f.value_dec = lower_dec;
upper.val_f.value_int = upper_int;
upper.val_f.value_dec = upper_dec;
va_list event_args;

uint8_t event;
uint8_t value_type;
uint8_t event_flags = KNOT_EVT_FLAG_NONE;
uint16_t time_sec = 0;
knot_value_type lower_limit;
knot_value_type upper_limit;

lower_limit.val_i = 0;
upper_limit.val_i = 0;

value_type = knot_thing_get_value_type(sensor_id);

if(value_type < 0)
return -1;

/* Read arguments and set event_flags */
va_start(event_args, sensor_id);
do {
event = (uint8_t) va_arg(event_args, int);
switch(event) {
case KNOT_EVT_FLAG_NONE:
break;
case KNOT_EVT_FLAG_CHANGE:
event_flags |= KNOT_EVT_FLAG_CHANGE;
break;
case KNOT_EVT_FLAG_TIME:
time_sec = (uint16_t) va_arg(event_args, int);
event_flags |= KNOT_EVT_FLAG_TIME;
break;
case KNOT_EVT_FLAG_UPPER_THRESHOLD:
if(value_type == KNOT_VALUE_TYPE_INT)
upper_limit.val_i = (int32_t) va_arg(event_args,
int);
if(value_type == KNOT_VALUE_TYPE_FLOAT)
upper_limit.val_f = (float) va_arg(event_args,
double);
event_flags |= KNOT_EVT_FLAG_UPPER_THRESHOLD;
break;
case KNOT_EVT_FLAG_LOWER_THRESHOLD:
if(value_type == KNOT_VALUE_TYPE_INT)
lower_limit.val_i = (int32_t) va_arg(event_args,
int);
if(value_type == KNOT_VALUE_TYPE_FLOAT)
lower_limit.val_f = (float) va_arg(event_args,
double);
event_flags |= KNOT_EVT_FLAG_LOWER_THRESHOLD;
break;
default:
va_end(event_args);
return -1;
}

} while(event);
va_end(event_args);

return knot_thing_config_data_item(sensor_id, event_flags, time_sec,
&lower, &upper);
&lower_limit, &upper_limit);
}
4 changes: 1 addition & 3 deletions src/KNoTThing.h
Original file line number Diff line number Diff line change
Expand Up @@ -43,9 +43,7 @@ class KNoTThing {
uint16_t type_id, uint8_t unit, rawReadFunction read,
rawWriteFunction write);

int registerDefaultConfig(uint8_t sensor_id, uint8_t event_flags,
uint16_t time_sec, int32_t upper_int, uint32_t upper_dec,
int32_t lower_int, uint32_t lower_dec);
int registerDefaultConfig(uint8_t sensor_id, ...);

void run();
private:
Expand Down
10 changes: 10 additions & 0 deletions src/knot_thing_main.c
Original file line number Diff line number Diff line change
Expand Up @@ -509,3 +509,13 @@ uint8_t knot_thing_get_sensor_id(const uint8_t index)
}
return data_items[index].id;
}

uint8_t knot_thing_get_value_type(const uint8_t sensor_id)
{
struct _data_items *item = find_item(sensor_id);

if(!item)
return -1;

return item->value_type;
}
3 changes: 3 additions & 0 deletions src/knot_thing_main.h
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,9 @@ int knot_thing_config_data_item(uint8_t id, uint8_t evflags, uint16_t time_sec,
/* Find id for item in given index. Returns 0 if index is out of boundaries */
uint8_t knot_thing_get_sensor_id(const uint8_t index);

/* Get value type for given sensor id. Returns -1 if id is not registered */
uint8_t knot_thing_get_value_type(const uint8_t sensor_id);

#ifdef __cplusplus
}
#endif
Expand Down

0 comments on commit 6b76300

Please sign in to comment.