Example program for simple-mbed-client, connecting a device to mbed Device Connector.

Dependencies:   C12832 FXOS8700Q simple-mbed-client

Fork of simple-mbed-client-example by sandbox

Committer:
Jan Jongboom
Date:
Fri Dec 02 15:46:04 2016 +0800
Revision:
35:4b11d20d60e9
Child:
38:fbbab77b54fb
Move main.cpp into source directory

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Jan Jongboom 35:4b11d20d60e9 1 #include "mbed.h"
Jan Jongboom 35:4b11d20d60e9 2 #include "security.h"
Jan Jongboom 35:4b11d20d60e9 3 #include "easy-connect.h"
Jan Jongboom 35:4b11d20d60e9 4 #include "simple-mbed-client.h"
Jan Jongboom 35:4b11d20d60e9 5
Jan Jongboom 35:4b11d20d60e9 6 EventQueue eventQueue(32 * EVENTS_EVENT_SIZE); // Event queue!
Jan Jongboom 35:4b11d20d60e9 7
Jan Jongboom 35:4b11d20d60e9 8 SimpleMbedClient client;
Jan Jongboom 35:4b11d20d60e9 9
Jan Jongboom 35:4b11d20d60e9 10 // Declare peripherals
Jan Jongboom 35:4b11d20d60e9 11 DigitalOut connectivityLed(LED2); // Blinks while connecting, turns solid when connected
Jan Jongboom 35:4b11d20d60e9 12 DigitalOut augmentedLed(LED1, BUILTIN_LED_OFF); // LED that can be controlled through Connector
Jan Jongboom 35:4b11d20d60e9 13 InterruptIn btn(MBED_CONF_APP_BUTTON); // Button that sends it's count to Connector
Jan Jongboom 35:4b11d20d60e9 14
Jan Jongboom 35:4b11d20d60e9 15 Ticker connectivityTicker;
Jan Jongboom 35:4b11d20d60e9 16
Jan Jongboom 35:4b11d20d60e9 17 // Callback function when the pattern resource is updated
Jan Jongboom 35:4b11d20d60e9 18 void patternUpdated(string v) {
Jan Jongboom 35:4b11d20d60e9 19 printf("New pattern: %s\n", v.c_str());
Jan Jongboom 35:4b11d20d60e9 20 }
Jan Jongboom 35:4b11d20d60e9 21
Jan Jongboom 35:4b11d20d60e9 22 // Define resources here. They act as normal variables, but are exposed to the internet...
Jan Jongboom 35:4b11d20d60e9 23 SimpleResourceInt btn_count = client.define_resource("button/0/clicks", 0, M2MBase::GET_ALLOWED);
Jan Jongboom 35:4b11d20d60e9 24 SimpleResourceString pattern = client.define_resource("led/0/pattern", "500:500:500:500:500:500:500", &patternUpdated);
Jan Jongboom 35:4b11d20d60e9 25
Jan Jongboom 35:4b11d20d60e9 26 void fall() {
Jan Jongboom 35:4b11d20d60e9 27 btn_count = btn_count + 1;
Jan Jongboom 35:4b11d20d60e9 28 printf("Button count is now %d\r\n", static_cast<int>(btn_count));
Jan Jongboom 35:4b11d20d60e9 29 }
Jan Jongboom 35:4b11d20d60e9 30
Jan Jongboom 35:4b11d20d60e9 31 void toggleConnectivityLed() {
Jan Jongboom 35:4b11d20d60e9 32 connectivityLed = !connectivityLed;
Jan Jongboom 35:4b11d20d60e9 33 }
Jan Jongboom 35:4b11d20d60e9 34
Jan Jongboom 35:4b11d20d60e9 35 void registered() {
Jan Jongboom 35:4b11d20d60e9 36 printf("Registered\r\n");
Jan Jongboom 35:4b11d20d60e9 37
Jan Jongboom 35:4b11d20d60e9 38 connectivityTicker.detach();
Jan Jongboom 35:4b11d20d60e9 39 connectivityLed = BUILTIN_LED_ON;
Jan Jongboom 35:4b11d20d60e9 40 }
Jan Jongboom 35:4b11d20d60e9 41
Jan Jongboom 35:4b11d20d60e9 42 void play(void* args) {
Jan Jongboom 35:4b11d20d60e9 43 connectivityLed = BUILTIN_LED_OFF;
Jan Jongboom 35:4b11d20d60e9 44
Jan Jongboom 35:4b11d20d60e9 45 // Parse the pattern string, and toggle the LED in that pattern
Jan Jongboom 35:4b11d20d60e9 46 stringstream ss(pattern);
Jan Jongboom 35:4b11d20d60e9 47 string item;
Jan Jongboom 35:4b11d20d60e9 48 while(getline(ss, item, ':')) {
Jan Jongboom 35:4b11d20d60e9 49 wait_ms(atoi((const char*)item.c_str()));
Jan Jongboom 35:4b11d20d60e9 50 augmentedLed = !augmentedLed;
Jan Jongboom 35:4b11d20d60e9 51 }
Jan Jongboom 35:4b11d20d60e9 52
Jan Jongboom 35:4b11d20d60e9 53 augmentedLed = BUILTIN_LED_OFF;
Jan Jongboom 35:4b11d20d60e9 54 connectivityLed = BUILTIN_LED_ON;
Jan Jongboom 35:4b11d20d60e9 55 }
Jan Jongboom 35:4b11d20d60e9 56
Jan Jongboom 35:4b11d20d60e9 57 int main() {
Jan Jongboom 35:4b11d20d60e9 58 // Run a separate Thread to process events in
Jan Jongboom 35:4b11d20d60e9 59 rtos::Thread et;
Jan Jongboom 35:4b11d20d60e9 60 et.start(callback(&eventQueue, &EventQueue::dispatch_forever));
Jan Jongboom 35:4b11d20d60e9 61
Jan Jongboom 35:4b11d20d60e9 62 // Handle interrupts on the eventQueue - so we don't do things in interrupt context
Jan Jongboom 35:4b11d20d60e9 63 btn.fall(eventQueue.event(&fall));
Jan Jongboom 35:4b11d20d60e9 64
Jan Jongboom 35:4b11d20d60e9 65 // Toggle the built-in LED every second (until we're connected, see `registered` function)
Jan Jongboom 35:4b11d20d60e9 66 connectivityTicker.attach(eventQueue.event(toggleConnectivityLed), 1.0f);
Jan Jongboom 35:4b11d20d60e9 67
Jan Jongboom 35:4b11d20d60e9 68 // Keep alive ticker (every 25 seconds)
Jan Jongboom 35:4b11d20d60e9 69 eventQueue.call_every(25000, callback(&client, &SimpleMbedClient::keep_alive));
Jan Jongboom 35:4b11d20d60e9 70
Jan Jongboom 35:4b11d20d60e9 71 // Functions can be executed through mbed Device Connector via POST calls
Jan Jongboom 35:4b11d20d60e9 72 client.define_function("led/0/play", &play);
Jan Jongboom 35:4b11d20d60e9 73
Jan Jongboom 35:4b11d20d60e9 74 // Connect to the internet (see mbed_app.json for the connectivity method)
Jan Jongboom 35:4b11d20d60e9 75 NetworkInterface* network = easy_connect(true);
Jan Jongboom 35:4b11d20d60e9 76 if (!network) {
Jan Jongboom 35:4b11d20d60e9 77 return 1;
Jan Jongboom 35:4b11d20d60e9 78 }
Jan Jongboom 35:4b11d20d60e9 79
Jan Jongboom 35:4b11d20d60e9 80 // Connect to mbed Device Connector
Jan Jongboom 35:4b11d20d60e9 81 struct MbedClientOptions opts = client.get_default_options();
Jan Jongboom 35:4b11d20d60e9 82 opts.ServerAddress = MBED_SERVER_ADDRESS;
Jan Jongboom 35:4b11d20d60e9 83
Jan Jongboom 35:4b11d20d60e9 84 bool setup = client.setup(opts, network);
Jan Jongboom 35:4b11d20d60e9 85 if (!setup) {
Jan Jongboom 35:4b11d20d60e9 86 printf("Client setup failed\n");
Jan Jongboom 35:4b11d20d60e9 87 return 1;
Jan Jongboom 35:4b11d20d60e9 88 }
Jan Jongboom 35:4b11d20d60e9 89
Jan Jongboom 35:4b11d20d60e9 90 client.on_registered(&registered);
Jan Jongboom 35:4b11d20d60e9 91
Jan Jongboom 35:4b11d20d60e9 92 while (1) {}
Jan Jongboom 35:4b11d20d60e9 93 }