Example node for Yodiwo's Plegma API

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

Committer:
mitsarionas
Date:
Fri Sep 04 08:41:34 2015 +0000
Revision:
2:b7489c070d1f
Parent:
0:00797f1ebe04
Child:
3:11b767300d32
pairing & configuration read/write working

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 "MQTTEthernet.h"
mitsarionas 0:00797f1ebe04 5 #include "MQTTClient.h"
mitsarionas 0:00797f1ebe04 6 #include "HTTPD.h"
mitsarionas 0:00797f1ebe04 7 //#include "HTTPServer.h"
mitsarionas 0:00797f1ebe04 8 //#include "LocalFileSystem.h"
mitsarionas 0:00797f1ebe04 9 #include "SDFileSystem.h" // SD File System functions
mitsarionas 2:b7489c070d1f 10
mitsarionas 0:00797f1ebe04 11 #include "FsHandler.h"
mitsarionas 0:00797f1ebe04 12 #include "RpcHandler.h"
mitsarionas 0:00797f1ebe04 13 #include "pairing_backend.h"
mitsarionas 2:b7489c070d1f 14 #include "pairing_http_handler.h"
mitsarionas 2:b7489c070d1f 15 #include "config.h"
mitsarionas 0:00797f1ebe04 16
mitsarionas 0:00797f1ebe04 17 #define DAT0 PTE3 // MOSI
mitsarionas 0:00797f1ebe04 18 #define CMD PTE1 // MISO
mitsarionas 0:00797f1ebe04 19 #define CLK PTE2 // SCLK
mitsarionas 0:00797f1ebe04 20 #define CD PTE4 // CS
mitsarionas 0:00797f1ebe04 21
mitsarionas 0:00797f1ebe04 22
mitsarionas 0:00797f1ebe04 23 EthernetInterface eth;
mitsarionas 0:00797f1ebe04 24
mitsarionas 0:00797f1ebe04 25 DigitalOut led1(LED1);
mitsarionas 0:00797f1ebe04 26 InterruptIn sw2(SW2);
mitsarionas 0:00797f1ebe04 27 uint32_t button_pressed;
mitsarionas 0:00797f1ebe04 28 Thread *thread2;
mitsarionas 0:00797f1ebe04 29 //HTTPServer server;
mitsarionas 2:b7489c070d1f 30 extern HTTPD *httpd;
mitsarionas 0:00797f1ebe04 31 // Instantiate a local file system handler named 'local' which will be used later to access files on the mbed.
mitsarionas 0:00797f1ebe04 32 //LocalFileSystem local("local");
mitsarionas 0:00797f1ebe04 33
mitsarionas 0:00797f1ebe04 34
mitsarionas 0:00797f1ebe04 35 SDFileSystem sd(DAT0, CMD, CLK, CD, "sd"); // MOSI, MISO, SCLK, CS
mitsarionas 0:00797f1ebe04 36 //Serial pc(USBTX, USBRX); // Virtual COM Port
mitsarionas 0:00797f1ebe04 37
mitsarionas 2:b7489c070d1f 38 //MQTTEthernet ipstack;
mitsarionas 2:b7489c070d1f 39 MQTTSocket ipstack;
mitsarionas 2:b7489c070d1f 40 //MQTT::Client<MQTTEthernet, Countdown> *client;
mitsarionas 0:00797f1ebe04 41
mitsarionas 2:b7489c070d1f 42
mitsarionas 2:b7489c070d1f 43 config_t configuration;
mitsarionas 2:b7489c070d1f 44
mitsarionas 2:b7489c070d1f 45 extern pairing_context pairing_state;
mitsarionas 0:00797f1ebe04 46
mitsarionas 0:00797f1ebe04 47 void pairing_done(char *nodeKey, char *secretKey);
mitsarionas 0:00797f1ebe04 48
mitsarionas 0:00797f1ebe04 49 void sw2_press(void)
mitsarionas 0:00797f1ebe04 50 {
mitsarionas 0:00797f1ebe04 51 thread2->signal_set(0x1);
mitsarionas 0:00797f1ebe04 52 }
mitsarionas 0:00797f1ebe04 53
mitsarionas 0:00797f1ebe04 54 void led_thread(void const *argument)
mitsarionas 0:00797f1ebe04 55 {
mitsarionas 0:00797f1ebe04 56 while (true) {
mitsarionas 0:00797f1ebe04 57 led1 = !led1;
mitsarionas 0:00797f1ebe04 58 Thread::wait(1000);
mitsarionas 0:00797f1ebe04 59 }
mitsarionas 0:00797f1ebe04 60 }
mitsarionas 0:00797f1ebe04 61
mitsarionas 0:00797f1ebe04 62 void button_thread(void const *argument)
mitsarionas 0:00797f1ebe04 63 {
mitsarionas 0:00797f1ebe04 64 while (true) {
mitsarionas 0:00797f1ebe04 65 Thread::signal_wait(0x1);
mitsarionas 0:00797f1ebe04 66 button_pressed++;
mitsarionas 0:00797f1ebe04 67 }
mitsarionas 0:00797f1ebe04 68 }
mitsarionas 0:00797f1ebe04 69
mitsarionas 0:00797f1ebe04 70 void callback_pairing (int id);
mitsarionas 0:00797f1ebe04 71
mitsarionas 0:00797f1ebe04 72 int main()
mitsarionas 0:00797f1ebe04 73 {
mitsarionas 0:00797f1ebe04 74 Thread thread(led_thread);
mitsarionas 0:00797f1ebe04 75 // thread2 = new Thread(button_thread);
mitsarionas 0:00797f1ebe04 76
mitsarionas 0:00797f1ebe04 77 eth.init();
mitsarionas 0:00797f1ebe04 78 eth.connect();
mitsarionas 0:00797f1ebe04 79 printf("IP Address is %s\n", eth.getIPAddress());
mitsarionas 0:00797f1ebe04 80
mitsarionas 2:b7489c070d1f 81 int r = read_config(&configuration, "/sd/config.json");
mitsarionas 2:b7489c070d1f 82 printf("read config returned: %d\n", r);
mitsarionas 0:00797f1ebe04 83
mitsarionas 2:b7489c070d1f 84 printf("p: %p %p\n", configuration.nodeKey, configuration.nodeSecret);
mitsarionas 2:b7489c070d1f 85 printf("...: %d %d\n", configuration.nodeKey[0], configuration.nodeKey[1]);
mitsarionas 2:b7489c070d1f 86 if (!configuration.nodeKey) {
mitsarionas 2:b7489c070d1f 87 printf("not paired, launching HTTP server for pairing\n");
mitsarionas 2:b7489c070d1f 88 start_pairing_http_server(&eth, 80, pairing_done);
mitsarionas 2:b7489c070d1f 89 } else {
mitsarionas 0:00797f1ebe04 90
mitsarionas 2:b7489c070d1f 91 printf("found NodeKey: %s, proceeding to connection\n", configuration.nodeKey);
mitsarionas 2:b7489c070d1f 92 }
mitsarionas 2:b7489c070d1f 93
mitsarionas 2:b7489c070d1f 94 ipstack = MQTTSocket();
mitsarionas 2:b7489c070d1f 95 // client = new MQTT::Client<MQTTEthernet, Countdown>(ipstack);
mitsarionas 0:00797f1ebe04 96
mitsarionas 0:00797f1ebe04 97 // eth.disconnect();
mitsarionas 2:b7489c070d1f 98
mitsarionas 0:00797f1ebe04 99
mitsarionas 0:00797f1ebe04 100 button_pressed = 0;
mitsarionas 0:00797f1ebe04 101 sw2.fall(&sw2_press);
mitsarionas 0:00797f1ebe04 102 while (true) {
mitsarionas 0:00797f1ebe04 103 Thread::wait(5000);
mitsarionas 0:00797f1ebe04 104 // printf("SW2 was pressed (last 5 seconds): %d \n", button_pressed);
mitsarionas 0:00797f1ebe04 105 fflush(stdout);
mitsarionas 0:00797f1ebe04 106 // button_pressed = 0;
mitsarionas 0:00797f1ebe04 107 }
mitsarionas 0:00797f1ebe04 108 }
mitsarionas 0:00797f1ebe04 109
mitsarionas 0:00797f1ebe04 110
mitsarionas 0:00797f1ebe04 111 void pairing_done(char *nodeKey, char *secretKey)
mitsarionas 0:00797f1ebe04 112 {
mitsarionas 0:00797f1ebe04 113 printf("pairing done!\n");
mitsarionas 0:00797f1ebe04 114 printf("NokeKey: %s\n", nodeKey);
mitsarionas 0:00797f1ebe04 115 printf("SecretKey: %s\n", secretKey);
mitsarionas 2:b7489c070d1f 116 configuration.nodeKey = nodeKey;
mitsarionas 2:b7489c070d1f 117 configuration.nodeSecret = secretKey;
mitsarionas 2:b7489c070d1f 118 int r = write_config(&configuration, "/sd/config.json");
mitsarionas 2:b7489c070d1f 119 if (r < 0) {
mitsarionas 2:b7489c070d1f 120 printf("error writing config to file\n");
mitsarionas 2:b7489c070d1f 121 } else {
mitsarionas 2:b7489c070d1f 122 printf("successfully written new config to file\n");
mitsarionas 2:b7489c070d1f 123 }
mitsarionas 0:00797f1ebe04 124 }