Example node for Yodiwo's Plegma API

Dependencies:   EthernetInterface FXOS8700Q HTTPClient HTTPD MQTTS SDFileSystem YodiwoPlegma mbed-rpc mbed-rtos mbed wolfSSL

Committer:
mitsarionas
Date:
Mon Sep 28 09:13:43 2015 +0000
Revision:
8:66d34592c1ad
Parent:
7:11ff316c37ba
using published HTTPClient

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mitsarionas 5:1ef168357347 1 #include "mbed.h"
mitsarionas 5:1ef168357347 2 #include "rtos.h"
mitsarionas 5:1ef168357347 3
mitsarionas 5:1ef168357347 4 #include <stdint.h>
mitsarionas 5:1ef168357347 5
mitsarionas 7:11ff316c37ba 6 #include "yoplegma_things.h"
mitsarionas 5:1ef168357347 7 #include "yodiwo_functions.h"
mitsarionas 5:1ef168357347 8 #include "jsmn.h"
mitsarionas 5:1ef168357347 9 #include "yodiwo_api.h"
mitsarionas 5:1ef168357347 10 #include "yodiwo_helpers.h"
mitsarionas 5:1ef168357347 11
mitsarionas 5:1ef168357347 12 ///////////////////////////////// LEDS
mitsarionas 5:1ef168357347 13 DigitalOut redled(LED1);
mitsarionas 5:1ef168357347 14 DigitalOut greenled(LED2);
mitsarionas 5:1ef168357347 15 DigitalOut blueled(LED3);
mitsarionas 5:1ef168357347 16
mitsarionas 5:1ef168357347 17 ///////////////////////////////// THINGS
mitsarionas 5:1ef168357347 18 Yodiwo_Plegma_Port_t button_port;
mitsarionas 5:1ef168357347 19 Yodiwo_Plegma_Port_t axel_port;
mitsarionas 5:1ef168357347 20 Yodiwo_Plegma_Port_t _led_ports[3];
mitsarionas 5:1ef168357347 21
mitsarionas 5:1ef168357347 22 Yodiwo_Plegma_Thing_t *button;
mitsarionas 5:1ef168357347 23 Yodiwo_Plegma_Thing_t *axel;
mitsarionas 5:1ef168357347 24 Yodiwo_Plegma_Thing_t *led;
mitsarionas 5:1ef168357347 25
mitsarionas 5:1ef168357347 26 Yodiwo_Plegma_Thing_t _things[3];
mitsarionas 5:1ef168357347 27 Array_Yodiwo_Plegma_Thing_t things;
mitsarionas 5:1ef168357347 28
mitsarionas 5:1ef168357347 29
mitsarionas 5:1ef168357347 30 int shaken_event()
mitsarionas 5:1ef168357347 31 {
mitsarionas 5:1ef168357347 32 Yodiwo_Plegma_PortEvent_t event;
mitsarionas 5:1ef168357347 33 Array_Yodiwo_Plegma_PortEvent_t array_events;
mitsarionas 5:1ef168357347 34
mitsarionas 5:1ef168357347 35 event.PortKey = axel->Ports.elems[0].PortKey;
mitsarionas 5:1ef168357347 36 event.State = "True";
mitsarionas 5:1ef168357347 37 event.RevNum = 1;
mitsarionas 5:1ef168357347 38
mitsarionas 5:1ef168357347 39 array_events.num = 1;
mitsarionas 5:1ef168357347 40 array_events.elems = &event;
mitsarionas 5:1ef168357347 41
mitsarionas 5:1ef168357347 42 return portevents(&array_events);
mitsarionas 5:1ef168357347 43 }
mitsarionas 5:1ef168357347 44
mitsarionas 5:1ef168357347 45 int button_event(int buttonId, bool pressed)
mitsarionas 5:1ef168357347 46 {
mitsarionas 5:1ef168357347 47 printf("button %d: %s\n", buttonId, (pressed) ? "pressed" : "released");
mitsarionas 5:1ef168357347 48
mitsarionas 5:1ef168357347 49 Yodiwo_Plegma_PortEvent_t event;
mitsarionas 5:1ef168357347 50 Array_Yodiwo_Plegma_PortEvent_t array_events;
mitsarionas 5:1ef168357347 51
mitsarionas 5:1ef168357347 52 event.PortKey = button->Ports.elems[0].PortKey;
mitsarionas 5:1ef168357347 53 event.State = (char *)((pressed) ? "True" : "False");
mitsarionas 5:1ef168357347 54 event.RevNum = 1;
mitsarionas 5:1ef168357347 55
mitsarionas 5:1ef168357347 56 array_events.num = 1;
mitsarionas 5:1ef168357347 57 array_events.elems = &event;
mitsarionas 5:1ef168357347 58
mitsarionas 5:1ef168357347 59 return portevents(&array_events);
mitsarionas 5:1ef168357347 60 }
mitsarionas 5:1ef168357347 61
mitsarionas 5:1ef168357347 62 void led_event(DigitalOut &led, Yodiwo_Plegma_PortEvent_t *event)
mitsarionas 5:1ef168357347 63 {
mitsarionas 5:1ef168357347 64 if (!strcmp(event->State, "on") || !strcmp(event->State, "1") || !strcmp(event->State, "true")
mitsarionas 5:1ef168357347 65 || !strcmp(event->State, "True") || !strcmp(event->State, "On")) {
mitsarionas 5:1ef168357347 66 printf("ON\n");
mitsarionas 5:1ef168357347 67 led = 0;
mitsarionas 5:1ef168357347 68 } else {
mitsarionas 5:1ef168357347 69 printf("OFF\n");
mitsarionas 5:1ef168357347 70 led = 1;
mitsarionas 5:1ef168357347 71 }
mitsarionas 5:1ef168357347 72 }
mitsarionas 5:1ef168357347 73
mitsarionas 5:1ef168357347 74 int handle_red_led(Yodiwo_Plegma_PortEvent_t *event)
mitsarionas 5:1ef168357347 75 {
mitsarionas 5:1ef168357347 76 printf("event for red led\n");
mitsarionas 5:1ef168357347 77 led_event(redled, event);
mitsarionas 5:1ef168357347 78 return 0;
mitsarionas 5:1ef168357347 79 }
mitsarionas 5:1ef168357347 80
mitsarionas 5:1ef168357347 81 int handle_green_led(Yodiwo_Plegma_PortEvent_t *event)
mitsarionas 5:1ef168357347 82 {
mitsarionas 5:1ef168357347 83 printf("event for green led\n");
mitsarionas 5:1ef168357347 84 led_event(greenled, event);
mitsarionas 5:1ef168357347 85 return 0;
mitsarionas 5:1ef168357347 86 }
mitsarionas 5:1ef168357347 87
mitsarionas 5:1ef168357347 88 int handle_blue_led(Yodiwo_Plegma_PortEvent_t *event)
mitsarionas 5:1ef168357347 89 {
mitsarionas 5:1ef168357347 90 printf("event for blue led\n");
mitsarionas 5:1ef168357347 91 led_event(blueled, event);
mitsarionas 5:1ef168357347 92 return 0;
mitsarionas 5:1ef168357347 93 }
mitsarionas 5:1ef168357347 94
mitsarionas 5:1ef168357347 95 void initialize_things(char *nodeKey)
mitsarionas 5:1ef168357347 96 {
mitsarionas 5:1ef168357347 97 // init thing pointers
mitsarionas 5:1ef168357347 98 button = &_things[0];
mitsarionas 5:1ef168357347 99 axel = &_things[1];
mitsarionas 5:1ef168357347 100 led = &_things[2];
mitsarionas 5:1ef168357347 101
mitsarionas 5:1ef168357347 102 //BUTTON
mitsarionas 5:1ef168357347 103 button_port.ConfFlags = Yodiwo_ePortConf_None; //why not
mitsarionas 5:1ef168357347 104 button_port.Description = "the state of the freedom button";
mitsarionas 5:1ef168357347 105 button_port.Name = "BTN State";
mitsarionas 5:1ef168357347 106 button_port.Type = Yodiwo_ePortType_Boolean;
mitsarionas 5:1ef168357347 107 button_port.State = "False";
mitsarionas 5:1ef168357347 108 button_port.RevNum = 1;
mitsarionas 5:1ef168357347 109 button_port.ioDirection = Yodiwo_ioPortDirection_Output;
mitsarionas 5:1ef168357347 110 button_port.PortKey = "";
mitsarionas 5:1ef168357347 111
mitsarionas 5:1ef168357347 112 button->ThingKey = "";
mitsarionas 5:1ef168357347 113 button->Name = "FRDM Button";
mitsarionas 5:1ef168357347 114 button->Config.num = 0;
mitsarionas 5:1ef168357347 115 button->Config.elems = NULL;
mitsarionas 5:1ef168357347 116 button->Ports.num = 1;
mitsarionas 5:1ef168357347 117 button->Ports.elems = &button_port;
mitsarionas 5:1ef168357347 118 button->Type = "";
mitsarionas 5:1ef168357347 119 button->BlockType = "";
mitsarionas 5:1ef168357347 120 button->UIHints.Description = "";
mitsarionas 5:1ef168357347 121 button->UIHints.IconURI = "/Content/VirtualGateway/img/icon-thing-genericbutton.png";
mitsarionas 5:1ef168357347 122
mitsarionas 5:1ef168357347 123 //AXEL
mitsarionas 5:1ef168357347 124 axel_port.ConfFlags = Yodiwo_ePortConf_IsTrigger; //why not
mitsarionas 5:1ef168357347 125 axel_port.Description = "triggered when the shaker is shaked";
mitsarionas 5:1ef168357347 126 axel_port.Name = "SHAKER SHAKED";
mitsarionas 5:1ef168357347 127 axel_port.Type = Yodiwo_ePortType_Boolean;
mitsarionas 5:1ef168357347 128 axel_port.State = "";
mitsarionas 5:1ef168357347 129 axel_port.RevNum = 1;
mitsarionas 5:1ef168357347 130 axel_port.ioDirection = Yodiwo_ioPortDirection_Output;
mitsarionas 5:1ef168357347 131 axel_port.PortKey = "";
mitsarionas 5:1ef168357347 132
mitsarionas 5:1ef168357347 133 axel->ThingKey = "";
mitsarionas 5:1ef168357347 134 axel->Name = "FRDM SHAKER";
mitsarionas 5:1ef168357347 135 axel->Config.num = 0;
mitsarionas 5:1ef168357347 136 axel->Config.elems = NULL;
mitsarionas 5:1ef168357347 137 axel->Ports.num = 1;
mitsarionas 5:1ef168357347 138 axel->Ports.elems = &axel_port;
mitsarionas 5:1ef168357347 139 axel->Type = "";
mitsarionas 5:1ef168357347 140 axel->BlockType = "";
mitsarionas 5:1ef168357347 141 axel->UIHints.Description = "";
mitsarionas 5:1ef168357347 142 axel->UIHints.IconURI = "/Content/VirtualGateway/img/accelerometer.jpg";
mitsarionas 5:1ef168357347 143
mitsarionas 5:1ef168357347 144 //LED
mitsarionas 5:1ef168357347 145 _led_ports[0].ConfFlags = Yodiwo_ePortConf_None; //why not
mitsarionas 5:1ef168357347 146 _led_ports[0].Description = "RED LED";
mitsarionas 5:1ef168357347 147 _led_ports[0].Name = "RED LED";
mitsarionas 5:1ef168357347 148 _led_ports[0].Type = Yodiwo_ePortType_Boolean;
mitsarionas 5:1ef168357347 149 _led_ports[0].State = "False";
mitsarionas 5:1ef168357347 150 _led_ports[0].RevNum = 1;
mitsarionas 5:1ef168357347 151 _led_ports[0].ioDirection = Yodiwo_ioPortDirection_Input;
mitsarionas 5:1ef168357347 152 _led_ports[0].PortKey = "";
mitsarionas 5:1ef168357347 153
mitsarionas 5:1ef168357347 154 _led_ports[1].ConfFlags = Yodiwo_ePortConf_None; //why not
mitsarionas 5:1ef168357347 155 _led_ports[1].Description = "GREEN LED";
mitsarionas 5:1ef168357347 156 _led_ports[1].Name = "GREEN LED";
mitsarionas 5:1ef168357347 157 _led_ports[0].Type = Yodiwo_ePortType_Boolean;
mitsarionas 5:1ef168357347 158 _led_ports[1].State = "off";
mitsarionas 5:1ef168357347 159 _led_ports[1].RevNum = 1;
mitsarionas 5:1ef168357347 160 _led_ports[1].ioDirection = Yodiwo_ioPortDirection_Input;
mitsarionas 5:1ef168357347 161 _led_ports[1].PortKey = "";
mitsarionas 5:1ef168357347 162
mitsarionas 5:1ef168357347 163 _led_ports[2].ConfFlags = Yodiwo_ePortConf_None; //why not
mitsarionas 5:1ef168357347 164 _led_ports[2].Description = "BLUE LED";
mitsarionas 5:1ef168357347 165 _led_ports[2].Name = "BLUE LED";
mitsarionas 5:1ef168357347 166 _led_ports[0].Type = Yodiwo_ePortType_Boolean;
mitsarionas 5:1ef168357347 167 _led_ports[2].State = "off";
mitsarionas 5:1ef168357347 168 _led_ports[2].RevNum = 1;
mitsarionas 5:1ef168357347 169 _led_ports[2].ioDirection = Yodiwo_ioPortDirection_Input;
mitsarionas 5:1ef168357347 170 _led_ports[2].PortKey = "";
mitsarionas 5:1ef168357347 171
mitsarionas 5:1ef168357347 172 led->ThingKey = "";
mitsarionas 5:1ef168357347 173 led->Name = "FRDM LED";
mitsarionas 5:1ef168357347 174 led->Config.num = 0;
mitsarionas 5:1ef168357347 175 led->Config.elems = NULL;
mitsarionas 5:1ef168357347 176 led->Ports.num = 3;
mitsarionas 5:1ef168357347 177 led->Ports.elems = _led_ports;
mitsarionas 5:1ef168357347 178 led->Type = "";
mitsarionas 5:1ef168357347 179 led->BlockType = "";
mitsarionas 5:1ef168357347 180 led->UIHints.Description = "";
mitsarionas 5:1ef168357347 181 led->UIHints.IconURI = "/Content/VirtualGateway/img/icon-thing-genericlight.png";
mitsarionas 5:1ef168357347 182
mitsarionas 5:1ef168357347 183 things.num = 3;
mitsarionas 5:1ef168357347 184 things.elems = _things;
mitsarionas 5:1ef168357347 185
mitsarionas 5:1ef168357347 186 if (nodeKey != NULL) {
mitsarionas 5:1ef168357347 187 int r;
mitsarionas 5:1ef168357347 188 r = fill_Thing_Keys(&things.elems[0], nodeKey, 1);
mitsarionas 5:1ef168357347 189 r = fill_Thing_Keys(&things.elems[1], nodeKey, 2);
mitsarionas 5:1ef168357347 190 r = fill_Thing_Keys(&things.elems[2], nodeKey, 3);
mitsarionas 5:1ef168357347 191
mitsarionas 5:1ef168357347 192 printf("fill keys returned: %d\n", r);
mitsarionas 5:1ef168357347 193 }
mitsarionas 5:1ef168357347 194 }
mitsarionas 5:1ef168357347 195
mitsarionas 5:1ef168357347 196 void register_led_handlers()
mitsarionas 5:1ef168357347 197 {
mitsarionas 5:1ef168357347 198 redled = 1;
mitsarionas 5:1ef168357347 199 greenled = 1;
mitsarionas 5:1ef168357347 200 blueled = 1;
mitsarionas 5:1ef168357347 201 register_portevent_handler(things.elems[2].Ports.elems[0].PortKey, handle_red_led);
mitsarionas 5:1ef168357347 202 register_portevent_handler(things.elems[2].Ports.elems[1].PortKey, handle_green_led);
mitsarionas 5:1ef168357347 203 register_portevent_handler(things.elems[2].Ports.elems[2].PortKey, handle_blue_led);
mitsarionas 5:1ef168357347 204 }
mitsarionas 5:1ef168357347 205
mitsarionas 5:1ef168357347 206
mitsarionas 5:1ef168357347 207 #include "FXOS8700Q.h"
mitsarionas 5:1ef168357347 208 //FXOS8700Q acc( A4, A5, FXOS8700CQ_SLAVE_ADDR0); // Proper Ports and I2C address for Freescale Multi Axis shield
mitsarionas 5:1ef168357347 209 //FXOS8700Q mag( A4, A5, FXOS8700CQ_SLAVE_ADDR0); // Proper Ports and I2C address for Freescale Multi Axis shield
mitsarionas 5:1ef168357347 210 FXOS8700Q_acc acc( PTE25, PTE24, FXOS8700CQ_SLAVE_ADDR1); // Proper Ports and I2C Address for K64F Freedom board
mitsarionas 5:1ef168357347 211 FXOS8700Q_mag mag( PTE25, PTE24, FXOS8700CQ_SLAVE_ADDR1); // Proper Ports and I2C Address for K64F Freedom board
mitsarionas 5:1ef168357347 212
mitsarionas 5:1ef168357347 213 //MotionSensorDataUnits mag_data;
mitsarionas 5:1ef168357347 214 MotionSensorDataUnits acc_data;
mitsarionas 5:1ef168357347 215 //
mitsarionas 5:1ef168357347 216 //MotionSensorDataCounts mag_raw;
mitsarionas 5:1ef168357347 217 //MotionSensorDataCounts acc_raw;
mitsarionas 5:1ef168357347 218
mitsarionas 5:1ef168357347 219 #define DOWNSAMPLING 50
mitsarionas 5:1ef168357347 220
mitsarionas 5:1ef168357347 221 void axel_thread(const void *args)
mitsarionas 5:1ef168357347 222 {
mitsarionas 5:1ef168357347 223 // float faX, faY, faZ;
mitsarionas 5:1ef168357347 224 // float fmX, fmY, fmZ;
mitsarionas 5:1ef168357347 225 // int16_t raX, raY, raZ;
mitsarionas 5:1ef168357347 226 // int16_t rmX, rmY, rmZ;
mitsarionas 5:1ef168357347 227 acc.enable();
mitsarionas 5:1ef168357347 228 printf("\r\n\nFXOS8700Q Who Am I= %X\r\n", acc.whoAmI());
mitsarionas 5:1ef168357347 229 int count = 0;
mitsarionas 5:1ef168357347 230 int shaken_cd = 0;
mitsarionas 5:1ef168357347 231 while (true) {
mitsarionas 5:1ef168357347 232 // if (client->isConnected())
mitsarionas 5:1ef168357347 233 {
mitsarionas 5:1ef168357347 234 acc.getAxis(acc_data);
mitsarionas 5:1ef168357347 235 ++count %= DOWNSAMPLING;
mitsarionas 5:1ef168357347 236 if (shaken_cd) shaken_cd--;
mitsarionas 5:1ef168357347 237 if ((acc_data.x > 1.5f || acc_data.y > 1.5f || acc_data.z > 1.5f) && !shaken_cd) {
mitsarionas 5:1ef168357347 238 printf("shaken, not stirred\n");
mitsarionas 5:1ef168357347 239 shaken_cd = DOWNSAMPLING;
mitsarionas 5:1ef168357347 240 shaken_event();
mitsarionas 5:1ef168357347 241 }
mitsarionas 5:1ef168357347 242 if (!count) {
mitsarionas 5:1ef168357347 243 // mag.getAxis(mag_data);
mitsarionas 5:1ef168357347 244
mitsarionas 5:1ef168357347 245
mitsarionas 5:1ef168357347 246 // printf("FXOS8700Q ACC: X=%1.4f Y=%1.4f Z=%1.4f \n", acc_data.x, acc_data.y, acc_data.z);
mitsarionas 5:1ef168357347 247
mitsarionas 5:1ef168357347 248
mitsarionas 5:1ef168357347 249 // printf(" MAG: X=%4.1f Y=%4.1f Z=%4.1f\r\n", mag_data.x, mag_data.y, mag_data.z);
mitsarionas 5:1ef168357347 250 // acc.getX(&faX);
mitsarionas 5:1ef168357347 251 // acc.getY(&faY);
mitsarionas 5:1ef168357347 252 // acc.getZ(&faZ);
mitsarionas 5:1ef168357347 253 // mag.getX(&fmX);
mitsarionas 5:1ef168357347 254 // mag.getY(&fmY);
mitsarionas 5:1ef168357347 255 // mag.getZ(&fmZ);
mitsarionas 5:1ef168357347 256 // printf("FXOS8700Q ACC: X=%1.4f Y=%1.4f Z=%1.4f ", faX, faY, faZ);
mitsarionas 5:1ef168357347 257 // printf(" MAG: X=%4.1f Y=%4.1f Z=%4.1f\r\n", fmX, fmY, fmZ);
mitsarionas 5:1ef168357347 258 }
mitsarionas 5:1ef168357347 259 }
mitsarionas 5:1ef168357347 260 Thread::wait(20);
mitsarionas 5:1ef168357347 261 }
mitsarionas 5:1ef168357347 262 }