52#define PRINTF(...) printf(__VA_ARGS__)
57#define IPSO_INPUT_STATE 5500
58#define IPSO_INPUT_COUNTER 5501
59#define IPSO_INPUT_DEBOUNCE 5503
60#define IPSO_INPUT_EDGE_SEL 5504
61#define IPSO_INPUT_CTR_RESET 5505
62#define IPSO_INPUT_SENSOR_TYPE 5751
64#if PLATFORM_HAS_BUTTON
65#if PLATFORM_SUPPORTS_BUTTON_HAL
68#include "dev/button-sensor.h"
69#define IPSO_BUTTON_SENSOR button_sensor
73PROCESS(ipso_button_process,
"ipso-button");
77static lwm2m_status_t lwm2m_callback(lwm2m_object_instance_t *
object,
78 lwm2m_context_t *ctx);
80static int input_state = 0;
81static int32_t counter = 0;
82static int32_t edge_selection = 3;
83static int32_t debounce_time = 10;
85static const lwm2m_resource_id_t resources[] = {
86 RO(IPSO_INPUT_STATE), RO(IPSO_INPUT_COUNTER),
87 RW(IPSO_INPUT_DEBOUNCE), RW(IPSO_INPUT_EDGE_SEL), EX(IPSO_INPUT_CTR_RESET),
88 RO(IPSO_INPUT_SENSOR_TYPE)
92static lwm2m_object_instance_t reg_object = {
95 .resource_ids = resources,
96 .resource_count =
sizeof(resources) /
sizeof(lwm2m_resource_id_t),
97 .callback = lwm2m_callback,
104 PRINTF(
"Read button state: %d\n", input_state);
110lwm2m_callback(lwm2m_object_instance_t *
object,
111 lwm2m_context_t *ctx)
113 if(ctx->operation == LWM2M_OP_READ) {
114 switch(ctx->resource_id) {
115 case IPSO_INPUT_STATE:
116 lwm2m_object_write_int(ctx, read_state());
118 case IPSO_INPUT_COUNTER:
119 lwm2m_object_write_int(ctx, counter);
121 case IPSO_INPUT_DEBOUNCE:
122 lwm2m_object_write_int(ctx, debounce_time);
124 case IPSO_INPUT_EDGE_SEL:
125 lwm2m_object_write_int(ctx, edge_selection);
127 case IPSO_INPUT_SENSOR_TYPE:
128 lwm2m_object_write_string(ctx,
"button", strlen(
"button"));
131 return LWM2M_STATUS_ERROR;
133 }
else if(ctx->operation == LWM2M_OP_EXECUTE) {
134 if(ctx->resource_id == IPSO_INPUT_CTR_RESET) {
137 return LWM2M_STATUS_ERROR;
140 return LWM2M_STATUS_OK;
144ipso_button_init(
void)
148 lwm2m_engine_add_object(®_object);
150#if PLATFORM_HAS_BUTTON
155#if PLATFORM_HAS_BUTTON
160#if !PLATFORM_SUPPORTS_BUTTON_HAL
161 SENSORS_ACTIVATE(IPSO_BUTTON_SENSOR);
167#if PLATFORM_SUPPORTS_BUTTON_HAL
171 if((edge_selection & 2) != 0) {
172 lwm2m_notify_object_observers(®_object, IPSO_INPUT_STATE);
174 lwm2m_notify_object_observers(®_object, IPSO_INPUT_COUNTER);
177 if((edge_selection & 1) != 0) {
178 lwm2m_notify_object_observers(®_object, IPSO_INPUT_STATE);
182 if(ev == sensors_event && data == &IPSO_BUTTON_SENSOR) {
187 if((edge_selection & 2) != 0) {
188 lwm2m_notify_object_observers(®_object, IPSO_INPUT_STATE);
190 lwm2m_notify_object_observers(®_object, IPSO_INPUT_COUNTER);
198 }
else if(ev == PROCESS_EVENT_TIMER && data == &
timer) {
201 }
else if(IPSO_BUTTON_SENSOR.value(0) != 0) {
206 if((edge_selection & 1) != 0) {
207 lwm2m_notify_object_observers(®_object, IPSO_INPUT_STATE);
#define CLOCK_SECOND
A second, measured in system clock time.
void etimer_reset(struct etimer *et)
Reset an event timer with the same interval as was previously set.
void etimer_set(struct etimer *et, clock_time_t interval)
Set an event timer.
#define PROCESS(name, strname)
Declare a process.
#define PROCESS_WAIT_EVENT()
Wait for an event to be posted to the process.
#define PROCESS_BEGIN()
Define the beginning of a process.
#define PROCESS_END()
Define the end of a process.
void process_start(struct process *p, process_data_t data)
Start a process.
#define PROCESS_THREAD(name, ev, data)
Define the body of a process.
Header file for the Contiki OMA LWM2M engine.
Header file for the LWM2M object API.