Skip to content
This repository was archived by the owner on Apr 24, 2019. It is now read-only.

Commit 25fad92

Browse files
added separate resource for timer
1 parent 4cb71c2 commit 25fad92

File tree

1 file changed

+69
-7
lines changed

1 file changed

+69
-7
lines changed

main.cpp

Lines changed: 69 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -91,17 +91,18 @@ class InteractionProvider {
9191

9292
// Use the counter button handler to send an update of endpoint resource values
9393
// to connector every 15 seconds periodically.
94-
timer.attach(this, &InteractionProvider::counter_button_handler, 15.0);
94+
timer.attach(this, &InteractionProvider::timer_handler, 15.0);
9595
}
9696

9797
// flags for interaction, these are read from outside interrupt context
98-
volatile bool registered = false;
98+
volatile bool timer_ticked = false;
9999
volatile bool clicked = false;
100100

101+
101102
private:
102103

103-
void unreg_button_handler() {
104-
registered = false;
104+
void timer_handler() {
105+
timer_ticked = true;
105106
updates.release();
106107
}
107108

@@ -301,6 +302,61 @@ class ButtonResource {
301302
uint16_t counter;
302303
};
303304

305+
/*
306+
* The timer contains one property: counter.
307+
* When `handle_timer_tick` is executed, the counter updates.
308+
*/
309+
class TimerResource {
310+
public:
311+
TimerResource(): counter(0) {
312+
// create ObjectID with metadata tag of '3200', which is 'digital input'
313+
btn_object = M2MInterfaceFactory::create_object("3200");
314+
M2MObjectInstance* btn_inst = btn_object->create_object_instance();
315+
// create resource with ID '5502', which is digital input counter
316+
M2MResource* btn_res = btn_inst->create_dynamic_resource("5502", "Timer",
317+
M2MResourceInstance::INTEGER, true /* observable */);
318+
// we can read this value
319+
btn_res->set_operation(M2MBase::GET_ALLOWED);
320+
// set initial value (all values in mbed Client are buffers)
321+
// to be able to read this data easily in the Connector console, we'll use a string
322+
btn_res->set_value((uint8_t*)"0", 1);
323+
}
324+
325+
~TimerResource() {
326+
}
327+
328+
M2MObject* get_object() {
329+
return btn_object;
330+
}
331+
332+
/*
333+
* When the timer ticks, we read the current value of the click counter
334+
* from mbed Device Connector, then up the value with one.l
335+
*/
336+
void handle_timer_tick() {
337+
if (mbed_client.register_successful()) {
338+
M2MObjectInstance* inst = btn_object->object_instance();
339+
M2MResource* res = inst->resource("5502");
340+
341+
// up counter
342+
counter++;
343+
printf("handle_timer_click, new value of counter is %d\n", counter);
344+
// serialize the value of counter as a string, and tell connector
345+
char buffer[20];
346+
int size = sprintf(buffer,"%d",counter);
347+
res->set_value((uint8_t*)buffer, size);
348+
} else {
349+
printf("handle_timer_tick, device not registered\n");
350+
}
351+
}
352+
353+
private:
354+
M2MObject* btn_object;
355+
uint16_t counter;
356+
};
357+
358+
359+
304360
class BigPayloadResource {
305361
public:
306362
BigPayloadResource() {
@@ -395,10 +451,11 @@ Add MBEDTLS_NO_DEFAULT_ENTROPY_SOURCES and MBEDTLS_TEST_NULL_ENTROPY in mbed_app
395451
return -1;
396452
}
397453
398-
// we create our button and LED resources
454+
// we create our button, timer and LED resources
399455
ButtonResource button_resource;
400456
LedResource led_resource;
401457
BigPayloadResource big_payload_resource;
458+
TimerResource timer_resource;
402459
403460
// Network interaction must be performed outside of interrupt context
404461
Semaphore updates(0);
@@ -421,17 +478,18 @@ Add MBEDTLS_NO_DEFAULT_ENTROPY_SOURCES and MBEDTLS_TEST_NULL_ENTROPY in mbed_app
421478
object_list.push_back(button_resource.get_object());
422479
object_list.push_back(led_resource.get_object());
423480
object_list.push_back(big_payload_resource.get_object());
481+
object_list.push_back(timer_resource.get_object());
424482
425483
// Set endpoint registration object
426484
mbed_client.set_register_object(register_object);
427485
428486
// Register with mbed Device Connector
429487
mbed_client.test_register(register_object, object_list);
430-
interaction_provider.registered = true;
488+
volatile bool registered = true;
431489
432490
while (true) {
433491
updates.wait(25000);
434-
if(interaction_provider.registered) {
492+
if(registered) {
435493
if(!interaction_provider.clicked) {
436494
mbed_client.test_update_register();
437495
}
@@ -442,6 +500,10 @@ Add MBEDTLS_NO_DEFAULT_ENTROPY_SOURCES and MBEDTLS_TEST_NULL_ENTROPY in mbed_app
442500
interaction_provider.clicked = false;
443501
button_resource.handle_button_click();
444502
}
503+
if(interaction_provider.timer_ticked) {
504+
interaction_provider.timer_ticked = false;
505+
timer_resource.handle_timer_tick();
506+
}
445507
}
446508
447509
mbed_client.test_unregister();

0 commit comments

Comments
 (0)