@@ -91,17 +91,18 @@ class InteractionProvider {
91
91
92
92
// Use the counter button handler to send an update of endpoint resource values
93
93
// 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 );
95
95
}
96
96
97
97
// flags for interaction, these are read from outside interrupt context
98
- volatile bool registered = false ;
98
+ volatile bool timer_ticked = false ;
99
99
volatile bool clicked = false ;
100
100
101
+
101
102
private:
102
103
103
- void unreg_button_handler () {
104
- registered = false ;
104
+ void timer_handler () {
105
+ timer_ticked = true ;
105
106
updates.release ();
106
107
}
107
108
@@ -301,6 +302,61 @@ class ButtonResource {
301
302
uint16_t counter;
302
303
};
303
304
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
+
304
360
class BigPayloadResource {
305
361
public:
306
362
BigPayloadResource () {
@@ -395,10 +451,11 @@ Add MBEDTLS_NO_DEFAULT_ENTROPY_SOURCES and MBEDTLS_TEST_NULL_ENTROPY in mbed_app
395
451
return -1;
396
452
}
397
453
398
- // we create our button and LED resources
454
+ // we create our button, timer and LED resources
399
455
ButtonResource button_resource;
400
456
LedResource led_resource;
401
457
BigPayloadResource big_payload_resource;
458
+ TimerResource timer_resource;
402
459
403
460
// Network interaction must be performed outside of interrupt context
404
461
Semaphore updates(0);
@@ -421,17 +478,18 @@ Add MBEDTLS_NO_DEFAULT_ENTROPY_SOURCES and MBEDTLS_TEST_NULL_ENTROPY in mbed_app
421
478
object_list.push_back(button_resource.get_object());
422
479
object_list.push_back(led_resource.get_object());
423
480
object_list.push_back(big_payload_resource.get_object());
481
+ object_list.push_back(timer_resource.get_object());
424
482
425
483
// Set endpoint registration object
426
484
mbed_client.set_register_object(register_object);
427
485
428
486
// Register with mbed Device Connector
429
487
mbed_client.test_register(register_object, object_list);
430
- interaction_provider. registered = true;
488
+ volatile bool registered = true;
431
489
432
490
while (true) {
433
491
updates.wait(25000);
434
- if(interaction_provider. registered) {
492
+ if(registered) {
435
493
if(!interaction_provider.clicked) {
436
494
mbed_client.test_update_register();
437
495
}
@@ -442,6 +500,10 @@ Add MBEDTLS_NO_DEFAULT_ENTROPY_SOURCES and MBEDTLS_TEST_NULL_ENTROPY in mbed_app
442
500
interaction_provider.clicked = false;
443
501
button_resource.handle_button_click();
444
502
}
503
+ if(interaction_provider.timer_ticked) {
504
+ interaction_provider.timer_ticked = false;
505
+ timer_resource.handle_timer_tick();
506
+ }
445
507
}
446
508
447
509
mbed_client.test_unregister();
0 commit comments