Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions apps/ipso-objects/ipso-light-control.c
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@
*/

#include "ipso-objects.h"
#include "ipso-control-template.h"
#include "lwm2m-object.h"
#include "lwm2m-engine.h"

Expand Down
52 changes: 36 additions & 16 deletions apps/ipso-objects/ipso-sensor-template.c
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,6 @@
#include "ipso-sensor-template.h"
#include "lwm2m-engine.h"
#include <string.h>
#include <stdio.h>

#define IPSO_SENSOR_VALUE 5700
#define IPSO_SENSOR_UNIT 5701
Expand Down Expand Up @@ -76,7 +75,7 @@ struct periodic_sensor {
ipso_sensor_value_t *value;
uint16_t ticks_left;
} periodics[MAX_PERIODIC];

/*---------------------------------------------------------------------------*/
static void
timer_callback(ntimer_t *timer)
{
Expand All @@ -97,16 +96,29 @@ timer_callback(ntimer_t *timer)
}
}
}

static void
/*---------------------------------------------------------------------------*/
static int
add_periodic(const ipso_sensor_t *sensor)
{
int i;
for(i = 0; i < MAX_PERIODIC; i++) {
if(periodics[i].value == NULL) {
periodics[i].value = sensor->sensor_value;
periodics[i].ticks_left = sensor->update_interval;
return;
return 1;
}
}
return 0;
}
/*---------------------------------------------------------------------------*/
static void
remove_periodic(const ipso_sensor_t *sensor)
{
int i;
for(i = 0; i < MAX_PERIODIC; i++) {
if(periodics[i].value == sensor->sensor_value) {
periodics[i].value = NULL;
break;
}
}
}
Expand Down Expand Up @@ -203,16 +215,7 @@ lwm2m_callback(lwm2m_object_instance_t *object,
int
ipso_sensor_add(const ipso_sensor_t *sensor)
{
if(sensor->update_interval > 0) {
if(init == 0) {
ntimer_set_callback(&nt, timer_callback);
ntimer_set(&nt, 1000);
init = 1;
}
add_periodic(sensor);
}

if(sensor->sensor_value == NULL) {
if(sensor == NULL || sensor->sensor_value == NULL) {
return 0;
}
sensor->sensor_value->reg_object.object_id = sensor->object_id;
Expand All @@ -226,13 +229,30 @@ ipso_sensor_add(const ipso_sensor_t *sensor)
sensor->sensor_value->reg_object.resource_ids = resources;
sensor->sensor_value->reg_object.resource_count =
sizeof(resources) / sizeof(lwm2m_resource_id_t);
return lwm2m_engine_add_object(&sensor->sensor_value->reg_object);

if(lwm2m_engine_add_object(&sensor->sensor_value->reg_object)) {
if(sensor->update_interval > 0) {
if(init == 0) {
ntimer_set_callback(&nt, timer_callback);
ntimer_set(&nt, 1000);
init = 1;
}
add_periodic(sensor);
}
return 1;
}

return 0;
}
/*---------------------------------------------------------------------------*/
int
ipso_sensor_remove(const ipso_sensor_t *sensor)
{
if(sensor == NULL || sensor->sensor_value == NULL) {
return 0;
}
lwm2m_engine_remove_object(&sensor->sensor_value->reg_object);
remove_periodic(sensor);
return 1;
}
/*---------------------------------------------------------------------------*/
31 changes: 27 additions & 4 deletions apps/oma-lwm2m/lwm2m-engine.c
Original file line number Diff line number Diff line change
Expand Up @@ -733,7 +733,7 @@ perform_multi_resource_read_op(lwm2m_object_t *object,
}
/* ---------- Read operation ------------- */
} else if(ctx->operation == LWM2M_OP_READ) {
lwm2m_status_t success;
lwm2m_status_t success = LWM2M_STATUS_OK;
uint8_t lv;

lv = ctx->level;
Expand Down Expand Up @@ -1597,12 +1597,35 @@ lwm2m_handler_callback(coap_packet_t *request, coap_packet_t *response,
return COAP_HANDLER_STATUS_PROCESSED;
}
/*---------------------------------------------------------------------------*/
void lwm2m_notify_object_observers(lwm2m_object_instance_t *obj,
uint16_t resource)
void
lwm2m_notify_instance_observers(uint16_t object_id, uint16_t instance_id)
{
char path[20]; /* 60000/60000 */
snprintf(path, sizeof(path) - 1, "%u/%u", object_id, instance_id);
path[sizeof(path) - 1] = '\0';
coap_notify_observers_sub(NULL, path);
}
/*---------------------------------------------------------------------------*/
void
lwm2m_notify_resource_observers(uint16_t object_id, uint16_t instance_id,
uint16_t resource_id)
{
char path[20]; /* 60000/60000/60000 */
snprintf(path, sizeof(path) - 1, "%u/%u/%u",
object_id, instance_id, resource_id);
path[sizeof(path) - 1] = '\0';
coap_notify_observers_sub(NULL, path);
}
/*---------------------------------------------------------------------------*/
void
lwm2m_notify_object_observers(lwm2m_object_instance_t *obj,
uint16_t resource)
{
char path[20]; /* 60000/60000/60000 */
if(obj != NULL) {
snprintf(path, 20, "%d/%d/%d", obj->object_id, obj->instance_id, resource);
snprintf(path, sizeof(path) - 1, "%d/%d/%d",
obj->object_id, obj->instance_id, resource);
path[sizeof(path) - 1] = '\0';
coap_notify_observers_sub(NULL, path);
}
}
Expand Down
3 changes: 3 additions & 0 deletions apps/oma-lwm2m/lwm2m-engine.h
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,9 @@ int lwm2m_engine_add_object(lwm2m_object_instance_t *object);
void lwm2m_engine_remove_object(lwm2m_object_instance_t *object);
int lwm2m_engine_add_generic_object(lwm2m_object_t *object);
void lwm2m_engine_remove_generic_object(lwm2m_object_t *object);
void lwm2m_notify_instance_observers(uint16_t object_id, uint16_t instance_id);
void lwm2m_notify_resource_observers(uint16_t object_id, uint16_t instance_id,
uint16_t resource_id);
void lwm2m_notify_object_observers(lwm2m_object_instance_t *obj,
uint16_t resource);

Expand Down