17
17
#include < string>
18
18
#include < sstream>
19
19
#include < vector>
20
+ #include " mbed-trace/mbed_trace.h"
21
+ #include " eventOS_scheduler.h"
22
+ #include " eventOS_event.h"
23
+ #include " nsdynmemLIB.h"
24
+ #include " platform/arm_hal_timer.h"
25
+ #include " ns_event_loop.h"
20
26
21
27
#include " security.h"
22
28
@@ -48,6 +54,9 @@ LoWPANNDInterface mesh;
48
54
ThreadInterface mesh;
49
55
#endif
50
56
57
+ #define HEAP_SIZE 32500
58
+ static uint8_t app_stack_heap[HEAP_SIZE + 1 ];
59
+
51
60
Serial output (USBTX, USBRX);
52
61
53
62
// These are example resource values for the Device Object
@@ -178,10 +187,6 @@ class ButtonResource {
178
187
return btn_object;
179
188
}
180
189
181
- void button_clicked () {
182
- output.printf (" \n\r Button clicked\r\n " );
183
- }
184
-
185
190
/*
186
191
* When you press the button, we read the current value of the click counter
187
192
* from mbed Device Connector, then up the value with one.
@@ -210,13 +215,24 @@ class ButtonResource {
210
215
// Network interaction must be performed outside of interrupt context
211
216
Semaphore updates (0 );
212
217
volatile bool registered = false ;
218
+ volatile bool clicked = false ;
213
219
osThreadId mainThread;
214
220
215
221
void unregister () {
216
222
registered = false ;
217
223
updates.release ();
218
224
}
219
225
226
+ void button_clicked () {
227
+ clicked = true ;
228
+ updates.release ();
229
+ }
230
+
231
+ // debug printf function
232
+ void trace_printer (const char * str) {
233
+ printf (" %s\r\n " , str);
234
+ }
235
+
220
236
// Status indication
221
237
Ticker status_ticker;
222
238
DigitalOut status_led (LED1);
@@ -235,6 +251,16 @@ int main() {
235
251
236
252
output.printf (" Starting mbed Client example...\r\n " );
237
253
254
+ mbed_trace_init ();
255
+ mbed_trace_print_function_set (trace_printer);
256
+
257
+ ns_dyn_mem_init (app_stack_heap, HEAP_SIZE,
258
+ NULL , 0 );
259
+ platform_timer_enable ();
260
+ eventOS_scheduler_init ();
261
+ ns_event_loop_thread_create ();
262
+ ns_event_loop_thread_start ();
263
+
238
264
NetworkStack *network_stack = 0 ;
239
265
#if defined WIFI
240
266
output.printf (" \n\r Using WiFi \r\n " );
@@ -263,16 +289,16 @@ int main() {
263
289
}
264
290
265
291
// we create our button and LED resources
266
- ButtonResource * button_resource = new ButtonResource () ;
267
- LedResource * led_resource = new LedResource () ;
292
+ ButtonResource button_resource;
293
+ LedResource led_resource;
268
294
269
295
// On press of SW3 button on K64F board, example application
270
296
// will call unregister API towards mbed Device Connector
271
297
// unreg_button.fall(&mbed_client,&MbedClient::test_unregister);
272
298
unreg_button.fall (&unregister);
273
299
274
300
// Observation Button (SW2) press will send update of endpoint resource values to connector
275
- obs_button.fall (button_resource, &ButtonResource::handle_button_click );
301
+ obs_button.fall (&button_clicked );
276
302
277
303
// Create endpoint interface to manage register and unregister
278
304
mbed_client.create_interface (network_stack);
@@ -286,8 +312,8 @@ int main() {
286
312
287
313
// Add objects to list
288
314
object_list.push_back (device_object);
289
- object_list.push_back (button_resource-> get_object ());
290
- object_list.push_back (led_resource-> get_object ());
315
+ object_list.push_back (button_resource. get_object ());
316
+ object_list.push_back (led_resource. get_object ());
291
317
292
318
// Set endpoint registration object
293
319
mbed_client.set_register_object (register_object);
@@ -298,14 +324,17 @@ int main() {
298
324
299
325
while (true ) {
300
326
updates.wait (25000 );
301
-
302
- if (!registered) {
327
+ if (registered) {
328
+ mbed_client.test_update_register ();
329
+ }else {
303
330
break ;
304
331
}
332
+ if (clicked) {
333
+ clicked = false ;
334
+ button_resource.handle_button_click ();
335
+ }
305
336
}
306
337
307
338
mbed_client.test_unregister ();
308
339
status_ticker.detach ();
309
340
}
310
-
311
-
0 commit comments