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

Commit 2c964ba

Browse files
committed
Merge pull request #10 from ARMmbed/non-thread
Non thread
2 parents 03a213b + a7f6def commit 2c964ba

File tree

3 files changed

+71
-23
lines changed

3 files changed

+71
-23
lines changed

main.cpp

+57-16
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
#include <string>
1818
#include <sstream>
1919
#include <vector>
20+
#include "mbed-trace/mbed_trace.h"
2021

2122
#include "security.h"
2223

@@ -48,6 +49,22 @@ LoWPANNDInterface mesh;
4849
ThreadInterface mesh;
4950
#endif
5051

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+
5168
Serial output(USBTX, USBRX);
5269

5370
// These are example resource values for the Device Object
@@ -157,7 +174,7 @@ class LedResource {
157174
*/
158175
class ButtonResource {
159176
public:
160-
ButtonResource(){
177+
ButtonResource(): counter(0) {
161178
// create ObjectID with metadata tag of '3200', which is 'digital input'
162179
btn_object = M2MInterfaceFactory::create_object("3200");
163180
M2MObjectInstance* btn_inst = btn_object->create_object_instance();
@@ -178,10 +195,6 @@ class ButtonResource {
178195
return btn_object;
179196
}
180197

181-
void button_clicked() {
182-
output.printf("\n\rButton clicked\r\n");
183-
}
184-
185198
/*
186199
* When you press the button, we read the current value of the click counter
187200
* from mbed Device Connector, then up the value with one.
@@ -204,19 +217,30 @@ class ButtonResource {
204217

205218
private:
206219
M2MObject* btn_object;
207-
uint16_t counter = 0;
220+
uint16_t counter;
208221
};
209222

210223
// Network interaction must be performed outside of interrupt context
211224
Semaphore updates(0);
212225
volatile bool registered = false;
226+
volatile bool clicked = false;
213227
osThreadId mainThread;
214228

215229
void unregister() {
216230
registered = false;
217231
updates.release();
218232
}
219233

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+
220244
// Status indication
221245
Ticker status_ticker;
222246
DigitalOut status_led(LED1);
@@ -235,6 +259,18 @@ int main() {
235259

236260
output.printf("Starting mbed Client example...\r\n");
237261

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+
238274
NetworkStack *network_stack = 0;
239275
#if defined WIFI
240276
output.printf("\n\rUsing WiFi \r\n");
@@ -263,19 +299,19 @@ int main() {
263299
}
264300

265301
// 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;
268304

269305
// On press of SW3 button on K64F board, example application
270306
// will call unregister API towards mbed Device Connector
271307
//unreg_button.fall(&mbed_client,&MbedClient::test_unregister);
272308
unreg_button.fall(&unregister);
273309

274310
// 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);
276312

277313
// 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);
279315

280316
// Create Objects of varying types, see simpleclient.h for more details on implementation.
281317
M2MSecurity* register_object = mbed_client.create_register_object(); // server object specifying connector info
@@ -286,8 +322,8 @@ int main() {
286322

287323
// Add objects to list
288324
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());
291327

292328
// Set endpoint registration object
293329
mbed_client.set_register_object(register_object);
@@ -298,14 +334,19 @@ int main() {
298334

299335
while (true) {
300336
updates.wait(25000);
301-
302-
if (!registered) {
337+
if(registered) {
338+
if(!clicked) {
339+
mbed_client.test_update_register();
340+
}
341+
}else {
303342
break;
304343
}
344+
if(clicked) {
345+
clicked = false;
346+
button_resource.handle_button_click();
347+
}
305348
}
306349

307350
mbed_client.test_unregister();
308351
status_ticker.detach();
309352
}
310-
311-

mbed-os.lib

+1-1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
https://github.com/ARMmbed/mbed-os.git/#c4986eed9f42cbb3352c793d7a16d512d978d102
1+
https://github.com/ARMmbed/mbed-os/#77c8e885e91f3b2504335f7221dcc551547b76d3

simpleclient.h

+13-6
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,6 @@
3131
//Select binding mode: UDP or TCP
3232
M2MInterface::BindingMode SOCKET_MODE = M2MInterface::UDP;
3333

34-
// This is address to mbed Device Connector
35-
const String &MBED_SERVER_ADDRESS = YOTTA_CFG_DEVICE_CONNECTOR_URI;
36-
3734
// These come from the security.h file copied from connector.mbed.com
3835
const String &MBED_USER_NAME_DOMAIN = MBED_DOMAIN;
3936
const String &ENDPOINT_NAME = MBED_ENDPOINT_NAME;
@@ -91,8 +88,10 @@ class MbedClient: public M2MInterfaceObserver {
9188
* setup its name, resource type, life time, connection mode,
9289
* Currently only LwIPv4 is supported.
9390
*/
94-
void create_interface(void *handler=NULL) {
91+
void create_interface(const String &server_address,
92+
void *handler=NULL) {
9593
// Randomizing listening port for Certificate mode connectivity
94+
_server_address = server_address;
9695
srand(time(NULL));
9796
uint16_t port = rand() % 65535 + 12345;
9897

@@ -109,7 +108,7 @@ class MbedClient: public M2MInterfaceObserver {
109108
String binding_mode;
110109
(SOCKET_MODE == M2MInterface::UDP) ? binding_mode = "UDP" : binding_mode = "TCP";
111110
printf("\r\nSOCKET_MODE : %s\r\n", binding_mode.c_str());
112-
printf("Connecting to %s\r\n", MBED_SERVER_ADDRESS.c_str());
111+
printf("Connecting to %s\r\n", _server_address.c_str());
113112

114113
if(_interface) {
115114
_interface->set_platform_network_handler(handler);
@@ -143,7 +142,7 @@ class MbedClient: public M2MInterfaceObserver {
143142
// make sure security ObjectID/ObjectInstance was created successfully
144143
if(security) {
145144
// Add ResourceID's and values to the security ObjectID/ObjectInstance
146-
security->set_resource_value(M2MSecurity::M2MServerUri, MBED_SERVER_ADDRESS);
145+
security->set_resource_value(M2MSecurity::M2MServerUri, _server_address);
147146
security->set_resource_value(M2MSecurity::SecurityMode, M2MSecurity::Certificate);
148147
security->set_resource_value(M2MSecurity::ServerPublicKey, SERVER_CERT, sizeof(SERVER_CERT));
149148
security->set_resource_value(M2MSecurity::PublicKey, CERT, sizeof(CERT));
@@ -267,6 +266,13 @@ class MbedClient: public M2MInterfaceObserver {
267266
case M2MInterface::NotAllowed:
268267
trace_printer("[ERROR:] M2MInterface::NotAllowed");
269268
break;
269+
case M2MInterface::SecureConnectionFailed:
270+
trace_printer("[ERROR:] M2MInterface::SecureConnectionFailed");
271+
break;
272+
case M2MInterface::DnsResolvingFailed:
273+
trace_printer("[ERROR:] M2MInterface::DnsResolvingFailed");
274+
break;
275+
270276
default:
271277
break;
272278
}
@@ -319,6 +325,7 @@ class MbedClient: public M2MInterfaceObserver {
319325
volatile bool _unregistered;
320326
int _value;
321327
struct MbedClientDevice _device;
328+
String _server_address;
322329
};
323330

324331
#endif // __SIMPLECLIENT_H__

0 commit comments

Comments
 (0)