Example node for Yodiwo's Plegma API

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

Committer:
mitsarionas
Date:
Tue Sep 15 14:43:15 2015 +0000
Revision:
3:11b767300d32
Parent:
2:b7489c070d1f
Child:
4:cc4c5b6d9730
demo 1

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mitsarionas 0:00797f1ebe04 1 #include "mbed.h"
mitsarionas 0:00797f1ebe04 2 #include "rtos.h"
mitsarionas 0:00797f1ebe04 3 #include "EthernetInterface.h"
mitsarionas 0:00797f1ebe04 4 #include "HTTPD.h"
mitsarionas 0:00797f1ebe04 5 //#include "HTTPServer.h"
mitsarionas 0:00797f1ebe04 6 //#include "LocalFileSystem.h"
mitsarionas 0:00797f1ebe04 7 #include "SDFileSystem.h" // SD File System functions
mitsarionas 2:b7489c070d1f 8
mitsarionas 3:11b767300d32 9 //#include "FsHandler.h"
mitsarionas 3:11b767300d32 10 //#include "RpcHandler.h"
mitsarionas 0:00797f1ebe04 11 #include "pairing_backend.h"
mitsarionas 2:b7489c070d1f 12 #include "pairing_http_handler.h"
mitsarionas 2:b7489c070d1f 13 #include "config.h"
mitsarionas 3:11b767300d32 14 #include "yodiwo_functions.h"
mitsarionas 3:11b767300d32 15 #include "nodas.h"
mitsarionas 3:11b767300d32 16 #include "yodiwo_extra.h"
mitsarionas 0:00797f1ebe04 17
mitsarionas 0:00797f1ebe04 18 #define DAT0 PTE3 // MOSI
mitsarionas 0:00797f1ebe04 19 #define CMD PTE1 // MISO
mitsarionas 0:00797f1ebe04 20 #define CLK PTE2 // SCLK
mitsarionas 0:00797f1ebe04 21 #define CD PTE4 // CS
mitsarionas 0:00797f1ebe04 22
mitsarionas 0:00797f1ebe04 23
mitsarionas 0:00797f1ebe04 24 EthernetInterface eth;
mitsarionas 0:00797f1ebe04 25
mitsarionas 3:11b767300d32 26 DigitalOut blinking(LED4);
mitsarionas 0:00797f1ebe04 27 InterruptIn sw2(SW2);
mitsarionas 0:00797f1ebe04 28 uint32_t button_pressed;
mitsarionas 0:00797f1ebe04 29 Thread *thread2;
mitsarionas 0:00797f1ebe04 30 //HTTPServer server;
mitsarionas 2:b7489c070d1f 31 extern HTTPD *httpd;
mitsarionas 0:00797f1ebe04 32 // Instantiate a local file system handler named 'local' which will be used later to access files on the mbed.
mitsarionas 0:00797f1ebe04 33 //LocalFileSystem local("local");
mitsarionas 0:00797f1ebe04 34
mitsarionas 0:00797f1ebe04 35
mitsarionas 0:00797f1ebe04 36 SDFileSystem sd(DAT0, CMD, CLK, CD, "sd"); // MOSI, MISO, SCLK, CS
mitsarionas 0:00797f1ebe04 37 //Serial pc(USBTX, USBRX); // Virtual COM Port
mitsarionas 0:00797f1ebe04 38
mitsarionas 3:11b767300d32 39 Yodiwo_Tools_APIGenerator_CNodeYConfig_t configuration;
mitsarionas 3:11b767300d32 40 Yodiwo_Tools_APIGenerator_CNodeConfig_t *activeConfig;
mitsarionas 2:b7489c070d1f 41
mitsarionas 2:b7489c070d1f 42 extern pairing_context pairing_state;
mitsarionas 0:00797f1ebe04 43
mitsarionas 0:00797f1ebe04 44 void pairing_done(char *nodeKey, char *secretKey);
mitsarionas 0:00797f1ebe04 45
mitsarionas 0:00797f1ebe04 46 void sw2_press(void)
mitsarionas 0:00797f1ebe04 47 {
mitsarionas 3:11b767300d32 48 // button_event(1, true);
mitsarionas 0:00797f1ebe04 49 thread2->signal_set(0x1);
mitsarionas 0:00797f1ebe04 50 }
mitsarionas 0:00797f1ebe04 51
mitsarionas 3:11b767300d32 52 void sw2_release(void)
mitsarionas 3:11b767300d32 53 {
mitsarionas 3:11b767300d32 54 // button_event(1, false);
mitsarionas 3:11b767300d32 55 thread2->signal_set(0x2);
mitsarionas 3:11b767300d32 56 }
mitsarionas 3:11b767300d32 57
mitsarionas 0:00797f1ebe04 58 void led_thread(void const *argument)
mitsarionas 0:00797f1ebe04 59 {
mitsarionas 0:00797f1ebe04 60 while (true) {
mitsarionas 3:11b767300d32 61 blinking = blinking;
mitsarionas 0:00797f1ebe04 62 Thread::wait(1000);
mitsarionas 0:00797f1ebe04 63 }
mitsarionas 0:00797f1ebe04 64 }
mitsarionas 0:00797f1ebe04 65
mitsarionas 0:00797f1ebe04 66 void button_thread(void const *argument)
mitsarionas 0:00797f1ebe04 67 {
mitsarionas 0:00797f1ebe04 68 while (true) {
mitsarionas 3:11b767300d32 69 osEvent evt = Thread::signal_wait(0x1 | 0x02);
mitsarionas 3:11b767300d32 70 // button_event(1, true);
mitsarionas 3:11b767300d32 71 if (evt.value.signals & 0x01) {
mitsarionas 3:11b767300d32 72 button_event(1, true);
mitsarionas 3:11b767300d32 73 }
mitsarionas 3:11b767300d32 74 if (evt.value.signals & 0x02) {
mitsarionas 3:11b767300d32 75 button_event(1, false);
mitsarionas 3:11b767300d32 76 }
mitsarionas 3:11b767300d32 77
mitsarionas 0:00797f1ebe04 78 button_pressed++;
mitsarionas 0:00797f1ebe04 79 }
mitsarionas 0:00797f1ebe04 80 }
mitsarionas 0:00797f1ebe04 81
mitsarionas 3:11b767300d32 82 //void callback_pairing (int id);
mitsarionas 3:11b767300d32 83
mitsarionas 3:11b767300d32 84 int launch_mqtt();
mitsarionas 0:00797f1ebe04 85
mitsarionas 0:00797f1ebe04 86 int main()
mitsarionas 0:00797f1ebe04 87 {
mitsarionas 0:00797f1ebe04 88 Thread thread(led_thread);
mitsarionas 3:11b767300d32 89 thread2 = new Thread(button_thread);
mitsarionas 0:00797f1ebe04 90
mitsarionas 0:00797f1ebe04 91 eth.init();
mitsarionas 0:00797f1ebe04 92 eth.connect();
mitsarionas 0:00797f1ebe04 93 printf("IP Address is %s\n", eth.getIPAddress());
mitsarionas 0:00797f1ebe04 94
mitsarionas 2:b7489c070d1f 95 int r = read_config(&configuration, "/sd/config.json");
mitsarionas 2:b7489c070d1f 96 printf("read config returned: %d\n", r);
mitsarionas 3:11b767300d32 97 activeConfig = &configuration.Configs.elems[configuration.ActiveID];
mitsarionas 0:00797f1ebe04 98
mitsarionas 3:11b767300d32 99 printf("p: %p %p\n", activeConfig->NodeKey, activeConfig->NodeSecret);
mitsarionas 3:11b767300d32 100 printf("...: %d %d\n", activeConfig->NodeKey[0], activeConfig->NodeKey[1]);
mitsarionas 3:11b767300d32 101 if (!activeConfig->NodeKey) {
mitsarionas 2:b7489c070d1f 102 printf("not paired, launching HTTP server for pairing\n");
mitsarionas 2:b7489c070d1f 103 start_pairing_http_server(&eth, 80, pairing_done);
mitsarionas 2:b7489c070d1f 104 } else {
mitsarionas 3:11b767300d32 105 printf("found NodeKey: %s, proceeding to connection\n", activeConfig->NodeKey);
mitsarionas 3:11b767300d32 106 launch_mqtt();
mitsarionas 2:b7489c070d1f 107 }
mitsarionas 0:00797f1ebe04 108
mitsarionas 0:00797f1ebe04 109 // eth.disconnect();
mitsarionas 2:b7489c070d1f 110
mitsarionas 0:00797f1ebe04 111
mitsarionas 0:00797f1ebe04 112 button_pressed = 0;
mitsarionas 0:00797f1ebe04 113 sw2.fall(&sw2_press);
mitsarionas 3:11b767300d32 114 sw2.rise(&sw2_release);
mitsarionas 0:00797f1ebe04 115 while (true) {
mitsarionas 0:00797f1ebe04 116 Thread::wait(5000);
mitsarionas 0:00797f1ebe04 117 // printf("SW2 was pressed (last 5 seconds): %d \n", button_pressed);
mitsarionas 0:00797f1ebe04 118 fflush(stdout);
mitsarionas 3:11b767300d32 119 button_pressed = 0;
mitsarionas 0:00797f1ebe04 120 }
mitsarionas 0:00797f1ebe04 121 }
mitsarionas 0:00797f1ebe04 122
mitsarionas 3:11b767300d32 123 int launch_mqtt()
mitsarionas 3:11b767300d32 124 {
mitsarionas 3:11b767300d32 125 initialize_things(activeConfig->NodeKey);
mitsarionas 3:11b767300d32 126 init_yodiwo(activeConfig->Name, &things, publisher);
mitsarionas 3:11b767300d32 127 register_led_handlers();
mitsarionas 3:11b767300d32 128 return mqtt_init(activeConfig->MqttBrokerHostname,
mitsarionas 3:11b767300d32 129 activeConfig->MqttBrokerPort,
mitsarionas 3:11b767300d32 130 activeConfig->MqttBrokerCertFile,
mitsarionas 3:11b767300d32 131 activeConfig->NodeKey,
mitsarionas 3:11b767300d32 132 activeConfig->NodeSecret
mitsarionas 3:11b767300d32 133 );
mitsarionas 3:11b767300d32 134 }
mitsarionas 3:11b767300d32 135
mitsarionas 0:00797f1ebe04 136
mitsarionas 0:00797f1ebe04 137 void pairing_done(char *nodeKey, char *secretKey)
mitsarionas 0:00797f1ebe04 138 {
mitsarionas 0:00797f1ebe04 139 printf("pairing done!\n");
mitsarionas 0:00797f1ebe04 140 printf("NokeKey: %s\n", nodeKey);
mitsarionas 0:00797f1ebe04 141 printf("SecretKey: %s\n", secretKey);
mitsarionas 3:11b767300d32 142 activeConfig->NodeKey = nodeKey;
mitsarionas 3:11b767300d32 143 activeConfig->NodeSecret = secretKey;
mitsarionas 2:b7489c070d1f 144 int r = write_config(&configuration, "/sd/config.json");
mitsarionas 2:b7489c070d1f 145 if (r < 0) {
mitsarionas 2:b7489c070d1f 146 printf("error writing config to file\n");
mitsarionas 2:b7489c070d1f 147 } else {
mitsarionas 2:b7489c070d1f 148 printf("successfully written new config to file\n");
mitsarionas 3:11b767300d32 149 printf("launching mqtt now...\n");
mitsarionas 3:11b767300d32 150 launch_mqtt();
mitsarionas 2:b7489c070d1f 151 }
mitsarionas 0:00797f1ebe04 152 }