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 73 PROCESS(ipso_button_process,
"ipso-button");
77 static lwm2m_status_t lwm2m_callback(lwm2m_object_instance_t *
object,
78 lwm2m_context_t *ctx);
80 static int input_state = 0;
81 static int32_t counter = 0;
82 static int32_t edge_selection = 3;
83 static int32_t debounce_time = 10;
85 static 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)
92 static 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);
109 static lwm2m_status_t
110 lwm2m_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;
144 ipso_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);
Header file for the LWM2M object API
#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.
#define CLOCK_SECOND
A second, measured in system clock time.
Header file for the Contiki OMA LWM2M engine
PROCESS_THREAD(cc2538_rf_process, ev, data)
Implementation of the cc2538 RF driver process.
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.
void process_start(struct process *p, process_data_t data)
Start a process.