54 #define PRINTF(...) printf(__VA_ARGS__) 59 #define IPSO_ONOFF 5850 60 #define IPSO_DIMMER 5851 61 #define IPSO_ON_TIME 5852 63 static const lwm2m_resource_id_t resources[] =
71 ipso_control_set_on(ipso_control_t *control, uint8_t onoroff)
76 v = control->value & 0x7f;
84 return ipso_control_set_value(control, v);
88 ipso_control_set_value(ipso_control_t *control, uint8_t value)
90 lwm2m_status_t status = LWM2M_STATUS_OK;
93 was_on = ipso_control_is_on(control);
98 status = control->set_value(control, 0);
99 if(status == LWM2M_STATUS_OK) {
100 control->value &= 0x7f;
112 if(value != control->value) {
113 status = control->set_value(control, value & 0x7f);
114 if(status == LWM2M_STATUS_OK) {
115 control->value = value;
125 static lwm2m_status_t
126 lwm2m_callback(lwm2m_object_instance_t *
object, lwm2m_context_t *ctx)
128 ipso_control_t *control;
132 control = (ipso_control_t *)
object;
134 if(ctx->operation == LWM2M_OP_READ) {
135 switch(ctx->resource_id) {
137 v = ipso_control_is_on(control) ? 1 : 0;
140 v = ipso_control_get_value(control);
143 v = control->on_time;
144 if(ipso_control_is_on(control)) {
147 PRINTF(
"ON-TIME: %"PRId32
" (last on: %"PRIu32
"\n", v, control->on_time);
150 return LWM2M_STATUS_ERROR;
152 lwm2m_object_write_int(ctx, v);
153 return LWM2M_STATUS_OK;
155 }
else if(ctx->operation == LWM2M_OP_WRITE) {
156 switch(ctx->resource_id) {
158 if(lwm2m_object_read_int(ctx, ctx->inbuf->buffer, ctx->inbuf->size, &v) == 0) {
159 return LWM2M_STATUS_ERROR;
161 return ipso_control_set_on(control, v > 0);
163 if(lwm2m_object_read_int(ctx, ctx->inbuf->buffer, ctx->inbuf->size, &v) == 0) {
164 return LWM2M_STATUS_ERROR;
171 return ipso_control_set_value(control, v & 0xff);
173 if(lwm2m_object_read_int(ctx, ctx->inbuf->buffer, ctx->inbuf->size, &v) == 0) {
174 return LWM2M_STATUS_ERROR;
178 control->on_time = 0;
180 return LWM2M_STATUS_OK;
183 return LWM2M_STATUS_FORBIDDEN;
187 return LWM2M_STATUS_ERROR;
190 return LWM2M_STATUS_OPERATION_NOT_ALLOWED;
195 ipso_control_add(ipso_control_t *control)
197 control->reg_object.resource_ids = resources;
198 control->reg_object.resource_count =
199 sizeof(resources) /
sizeof(lwm2m_resource_id_t);
201 control->reg_object.callback = lwm2m_callback;
202 return lwm2m_engine_add_object(&control->reg_object);
206 ipso_control_remove(ipso_control_t *control)
208 lwm2m_engine_remove_object(&control->reg_object);
Implementation of OMA LWM2M / IPSO sensor template.
static uint64_t coap_timer_uptime(void)
Get the time since boot in milliseconds.
Header file for the Contiki OMA LWM2M engine