17
17
#include < string>
18
18
#include < sstream>
19
19
#include < vector>
20
+ #include " mbed-trace/mbed_trace.h"
20
21
21
22
#include " security.h"
22
23
@@ -48,6 +49,22 @@ LoWPANNDInterface mesh;
48
49
ThreadInterface mesh;
49
50
#endif
50
51
52
+ #ifndef MESH
53
+ #include " eventOS_scheduler.h"
54
+ #include " eventOS_event.h"
55
+ #include " nsdynmemLIB.h"
56
+ #include " platform/arm_hal_timer.h"
57
+ #include " ns_event_loop.h"
58
+
59
+ #define HEAP_SIZE 1023
60
+ static uint8_t app_stack_heap[HEAP_SIZE + 1 ];
61
+ // This is address to mbed Device Connector
62
+ const String &MBED_SERVER_ADDRESS = " coap://api.connector.mbed.com:5684" ;
63
+ #else
64
+ // This is address to mbed Device Connector
65
+ const String &MBED_SERVER_ADDRESS = YOTTA_CFG_DEVICE_CONNECTOR_URI;
66
+ #endif
67
+
51
68
Serial output (USBTX, USBRX);
52
69
53
70
// These are example resource values for the Device Object
@@ -157,7 +174,7 @@ class LedResource {
157
174
*/
158
175
class ButtonResource {
159
176
public:
160
- ButtonResource (){
177
+ ButtonResource (): counter( 0 ) {
161
178
// create ObjectID with metadata tag of '3200', which is 'digital input'
162
179
btn_object = M2MInterfaceFactory::create_object (" 3200" );
163
180
M2MObjectInstance* btn_inst = btn_object->create_object_instance ();
@@ -178,10 +195,6 @@ class ButtonResource {
178
195
return btn_object;
179
196
}
180
197
181
- void button_clicked () {
182
- output.printf (" \n\r Button clicked\r\n " );
183
- }
184
-
185
198
/*
186
199
* When you press the button, we read the current value of the click counter
187
200
* from mbed Device Connector, then up the value with one.
@@ -204,19 +217,30 @@ class ButtonResource {
204
217
205
218
private:
206
219
M2MObject* btn_object;
207
- uint16_t counter = 0 ;
220
+ uint16_t counter;
208
221
};
209
222
210
223
// Network interaction must be performed outside of interrupt context
211
224
Semaphore updates (0 );
212
225
volatile bool registered = false ;
226
+ volatile bool clicked = false ;
213
227
osThreadId mainThread;
214
228
215
229
void unregister () {
216
230
registered = false ;
217
231
updates.release ();
218
232
}
219
233
234
+ void button_clicked () {
235
+ clicked = true ;
236
+ updates.release ();
237
+ }
238
+
239
+ // debug printf function
240
+ void trace_printer (const char * str) {
241
+ printf (" %s\r\n " , str);
242
+ }
243
+
220
244
// Status indication
221
245
Ticker status_ticker;
222
246
DigitalOut status_led (LED1);
@@ -235,6 +259,18 @@ int main() {
235
259
236
260
output.printf (" Starting mbed Client example...\r\n " );
237
261
262
+ mbed_trace_init ();
263
+ mbed_trace_print_function_set (trace_printer);
264
+
265
+ #ifndef MESH
266
+ ns_dyn_mem_init (app_stack_heap, HEAP_SIZE,
267
+ NULL , 0 );
268
+ platform_timer_enable ();
269
+ eventOS_scheduler_init ();
270
+ ns_event_loop_thread_create ();
271
+ ns_event_loop_thread_start ();
272
+ #endif
273
+
238
274
NetworkStack *network_stack = 0 ;
239
275
#if defined WIFI
240
276
output.printf (" \n\r Using WiFi \r\n " );
@@ -263,19 +299,19 @@ int main() {
263
299
}
264
300
265
301
// we create our button and LED resources
266
- ButtonResource * button_resource = new ButtonResource () ;
267
- LedResource * led_resource = new LedResource () ;
302
+ ButtonResource button_resource;
303
+ LedResource led_resource;
268
304
269
305
// On press of SW3 button on K64F board, example application
270
306
// will call unregister API towards mbed Device Connector
271
307
// unreg_button.fall(&mbed_client,&MbedClient::test_unregister);
272
308
unreg_button.fall (&unregister);
273
309
274
310
// Observation Button (SW2) press will send update of endpoint resource values to connector
275
- obs_button.fall (button_resource, &ButtonResource::handle_button_click );
311
+ obs_button.fall (&button_clicked );
276
312
277
313
// Create endpoint interface to manage register and unregister
278
- mbed_client.create_interface (network_stack);
314
+ mbed_client.create_interface (MBED_SERVER_ADDRESS, network_stack);
279
315
280
316
// Create Objects of varying types, see simpleclient.h for more details on implementation.
281
317
M2MSecurity* register_object = mbed_client.create_register_object (); // server object specifying connector info
@@ -286,8 +322,8 @@ int main() {
286
322
287
323
// Add objects to list
288
324
object_list.push_back (device_object);
289
- object_list.push_back (button_resource-> get_object ());
290
- object_list.push_back (led_resource-> get_object ());
325
+ object_list.push_back (button_resource. get_object ());
326
+ object_list.push_back (led_resource. get_object ());
291
327
292
328
// Set endpoint registration object
293
329
mbed_client.set_register_object (register_object);
@@ -298,14 +334,19 @@ int main() {
298
334
299
335
while (true ) {
300
336
updates.wait (25000 );
301
-
302
- if (!registered) {
337
+ if (registered) {
338
+ if (!clicked) {
339
+ mbed_client.test_update_register ();
340
+ }
341
+ }else {
303
342
break ;
304
343
}
344
+ if (clicked) {
345
+ clicked = false ;
346
+ button_resource.handle_button_click ();
347
+ }
305
348
}
306
349
307
350
mbed_client.test_unregister ();
308
351
status_ticker.detach ();
309
352
}
310
-
311
-
0 commit comments