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 01 10:23:13 2015 +0000
Revision:
0:00797f1ebe04
Child:
2:b7489c070d1f
1st p0st

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 0:00797f1ebe04 10 //#include "HTTPRequestHandler.h"
mitsarionas 0:00797f1ebe04 11 #include "FsHandler.h"
mitsarionas 0:00797f1ebe04 12 #include "RpcHandler.h"
mitsarionas 0:00797f1ebe04 13 #include "pairing_backend.h"
mitsarionas 0:00797f1ebe04 14
mitsarionas 0:00797f1ebe04 15 #define DAT0 PTE3 // MOSI
mitsarionas 0:00797f1ebe04 16 #define CMD PTE1 // MISO
mitsarionas 0:00797f1ebe04 17 #define CLK PTE2 // SCLK
mitsarionas 0:00797f1ebe04 18 #define CD PTE4 // CS
mitsarionas 0:00797f1ebe04 19
mitsarionas 0:00797f1ebe04 20
mitsarionas 0:00797f1ebe04 21 EthernetInterface eth;
mitsarionas 0:00797f1ebe04 22
mitsarionas 0:00797f1ebe04 23 DigitalOut led1(LED1);
mitsarionas 0:00797f1ebe04 24 InterruptIn sw2(SW2);
mitsarionas 0:00797f1ebe04 25 uint32_t button_pressed;
mitsarionas 0:00797f1ebe04 26 Thread *thread2;
mitsarionas 0:00797f1ebe04 27 //HTTPServer server;
mitsarionas 0:00797f1ebe04 28 HTTPD *httpd;
mitsarionas 0:00797f1ebe04 29 // Instantiate a local file system handler named 'local' which will be used later to access files on the mbed.
mitsarionas 0:00797f1ebe04 30 //LocalFileSystem local("local");
mitsarionas 0:00797f1ebe04 31
mitsarionas 0:00797f1ebe04 32
mitsarionas 0:00797f1ebe04 33 SDFileSystem sd(DAT0, CMD, CLK, CD, "sd"); // MOSI, MISO, SCLK, CS
mitsarionas 0:00797f1ebe04 34 //Serial pc(USBTX, USBRX); // Virtual COM Port
mitsarionas 0:00797f1ebe04 35
mitsarionas 0:00797f1ebe04 36
mitsarionas 0:00797f1ebe04 37 pairing_context pairing_state;
mitsarionas 0:00797f1ebe04 38
mitsarionas 0:00797f1ebe04 39 void pairing_done(char *nodeKey, char *secretKey);
mitsarionas 0:00797f1ebe04 40
mitsarionas 0:00797f1ebe04 41 void sw2_press(void)
mitsarionas 0:00797f1ebe04 42 {
mitsarionas 0:00797f1ebe04 43 thread2->signal_set(0x1);
mitsarionas 0:00797f1ebe04 44 }
mitsarionas 0:00797f1ebe04 45
mitsarionas 0:00797f1ebe04 46 void led_thread(void const *argument)
mitsarionas 0:00797f1ebe04 47 {
mitsarionas 0:00797f1ebe04 48 while (true) {
mitsarionas 0:00797f1ebe04 49 led1 = !led1;
mitsarionas 0:00797f1ebe04 50 Thread::wait(1000);
mitsarionas 0:00797f1ebe04 51 }
mitsarionas 0:00797f1ebe04 52 }
mitsarionas 0:00797f1ebe04 53
mitsarionas 0:00797f1ebe04 54 void button_thread(void const *argument)
mitsarionas 0:00797f1ebe04 55 {
mitsarionas 0:00797f1ebe04 56 while (true) {
mitsarionas 0:00797f1ebe04 57 Thread::signal_wait(0x1);
mitsarionas 0:00797f1ebe04 58 button_pressed++;
mitsarionas 0:00797f1ebe04 59 }
mitsarionas 0:00797f1ebe04 60 }
mitsarionas 0:00797f1ebe04 61
mitsarionas 0:00797f1ebe04 62 void httpd_thread(void const *arg)
mitsarionas 0:00797f1ebe04 63 {
mitsarionas 0:00797f1ebe04 64 // HTTPD *server;
mitsarionas 0:00797f1ebe04 65 // server = HTTPD::getInstance();
mitsarionas 0:00797f1ebe04 66 //
mitsarionas 0:00797f1ebe04 67 // server->start(8080);
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 // FILE *File = fopen("/sd/sdfile.txt", "w"); // open file
mitsarionas 0:00797f1ebe04 78 // if(File == NULL) { // check if present
mitsarionas 0:00797f1ebe04 79 // printf("No SD Card or bad format\n"); // print message
mitsarionas 0:00797f1ebe04 80 // } else { // otherwise
mitsarionas 0:00797f1ebe04 81 // printf("Ready to write\n"); // message preparing to write
mitsarionas 0:00797f1ebe04 82 // }
mitsarionas 0:00797f1ebe04 83 // fprintf(File, "FRDM-K64F"); // write data
mitsarionas 0:00797f1ebe04 84 // fclose(File); // close file on SD
mitsarionas 0:00797f1ebe04 85
mitsarionas 0:00797f1ebe04 86
mitsarionas 0:00797f1ebe04 87 eth.init();
mitsarionas 0:00797f1ebe04 88
mitsarionas 0:00797f1ebe04 89 eth.connect();
mitsarionas 0:00797f1ebe04 90 printf("IP Address is %s\n", eth.getIPAddress());
mitsarionas 0:00797f1ebe04 91
mitsarionas 0:00797f1ebe04 92 // MQTTEthernet ipstack = MQTTEthernet();
mitsarionas 0:00797f1ebe04 93 // MQTT::Client<MQTTEthernet, Countdown> client = MQTT::Client<MQTTEthernet, Countdown>(ipstack);
mitsarionas 0:00797f1ebe04 94 //
mitsarionas 0:00797f1ebe04 95
mitsarionas 0:00797f1ebe04 96 // TCPSocketConnection sock;
mitsarionas 0:00797f1ebe04 97 // sock.connect("mbed.org", 80);
mitsarionas 0:00797f1ebe04 98 //
mitsarionas 0:00797f1ebe04 99 // char http_cmd[] = "GET /media/uploads/mbed_official/hello.txt HTTP/1.0\n\n";
mitsarionas 0:00797f1ebe04 100 // sock.send_all(http_cmd, sizeof(http_cmd)-1);
mitsarionas 0:00797f1ebe04 101 //
mitsarionas 0:00797f1ebe04 102 // char buffer[300];
mitsarionas 0:00797f1ebe04 103 // int ret;
mitsarionas 0:00797f1ebe04 104 // while (true) {
mitsarionas 0:00797f1ebe04 105 // ret = sock.receive(buffer, sizeof(buffer)-1);
mitsarionas 0:00797f1ebe04 106 // if (ret <= 0)
mitsarionas 0:00797f1ebe04 107 // break;
mitsarionas 0:00797f1ebe04 108 // buffer[ret] = '\0';
mitsarionas 0:00797f1ebe04 109 // printf("Received %d chars from server:\n%s\n", ret, buffer);
mitsarionas 0:00797f1ebe04 110 // }
mitsarionas 0:00797f1ebe04 111 //
mitsarionas 0:00797f1ebe04 112 // sock.close();
mitsarionas 0:00797f1ebe04 113
mitsarionas 0:00797f1ebe04 114 // HTTPFsRequestHandler::mount("/sd/", "/");
mitsarionas 0:00797f1ebe04 115 // server.addHandler<HTTPFsRequestHandler>("/");
mitsarionas 0:00797f1ebe04 116
mitsarionas 0:00797f1ebe04 117 // HTTPFsRequestHandler::mount("/sd/", "/");
mitsarionas 0:00797f1ebe04 118 // server.addHandler<HTTPRpcRequestHandler>("/");
mitsarionas 0:00797f1ebe04 119 //
mitsarionas 0:00797f1ebe04 120 // if (!server.start(80, &eth)) {
mitsarionas 0:00797f1ebe04 121 // error("Server not starting !");
mitsarionas 0:00797f1ebe04 122 // exit(0);
mitsarionas 0:00797f1ebe04 123 // }
mitsarionas 0:00797f1ebe04 124 //
mitsarionas 0:00797f1ebe04 125 httpd = new HTTPD;
mitsarionas 0:00797f1ebe04 126 // httpd->attach("/cgi-bin/", &callback_cgi);
mitsarionas 0:00797f1ebe04 127 // httpd->attach("/ws/", &callback_ws);
mitsarionas 0:00797f1ebe04 128 httpd->attach("/pairing_functions/", &callback_pairing);
mitsarionas 0:00797f1ebe04 129 httpd->attach("/", "/sd/www/");
mitsarionas 0:00797f1ebe04 130 httpd->start(80);
mitsarionas 0:00797f1ebe04 131
mitsarionas 0:00797f1ebe04 132 // Thread thread3(httpd_thread);
mitsarionas 0:00797f1ebe04 133 // eth.disconnect();
mitsarionas 0:00797f1ebe04 134 //
mitsarionas 0:00797f1ebe04 135
mitsarionas 0:00797f1ebe04 136 button_pressed = 0;
mitsarionas 0:00797f1ebe04 137 sw2.fall(&sw2_press);
mitsarionas 0:00797f1ebe04 138 while (true) {
mitsarionas 0:00797f1ebe04 139 Thread::wait(5000);
mitsarionas 0:00797f1ebe04 140 // printf("SW2 was pressed (last 5 seconds): %d \n", button_pressed);
mitsarionas 0:00797f1ebe04 141 fflush(stdout);
mitsarionas 0:00797f1ebe04 142 // button_pressed = 0;
mitsarionas 0:00797f1ebe04 143 }
mitsarionas 0:00797f1ebe04 144 }
mitsarionas 0:00797f1ebe04 145
mitsarionas 0:00797f1ebe04 146 void callback_pairing (int id) {
mitsarionas 0:00797f1ebe04 147 int i, n;
mitsarionas 0:00797f1ebe04 148 char buf[256];
mitsarionas 0:00797f1ebe04 149
mitsarionas 0:00797f1ebe04 150 if (!strcmp(httpd->getFilename(id), "start_pairing")) {
mitsarionas 0:00797f1ebe04 151 printf("starting pairing...\n");
mitsarionas 0:00797f1ebe04 152 pairing_context_init_with_defaults(&pairing_state, pairing_done);
mitsarionas 0:00797f1ebe04 153 start_pairing(&pairing_state);
mitsarionas 0:00797f1ebe04 154 }
mitsarionas 0:00797f1ebe04 155 strcpy(buf, httpd->getFilename(id));
mitsarionas 0:00797f1ebe04 156 strcat(buf, "\r\n");
mitsarionas 0:00797f1ebe04 157 strcat(buf, httpd->getQueryString(id));
mitsarionas 0:00797f1ebe04 158 strcat(buf, "\r\n");
mitsarionas 0:00797f1ebe04 159 n = strlen(buf);
mitsarionas 0:00797f1ebe04 160
mitsarionas 0:00797f1ebe04 161 i = httpd->receive(id, &buf[n], sizeof(buf) - n);
mitsarionas 0:00797f1ebe04 162 if (i < 0) return;
mitsarionas 0:00797f1ebe04 163 i += n;
mitsarionas 0:00797f1ebe04 164 buf[i] = 0;
mitsarionas 0:00797f1ebe04 165
mitsarionas 0:00797f1ebe04 166 printf("CGI %d %s\r\n", id, buf);
mitsarionas 0:00797f1ebe04 167 httpd->send(id, buf, i, "Content-Type: text/plain\r\n");
mitsarionas 0:00797f1ebe04 168 }
mitsarionas 0:00797f1ebe04 169
mitsarionas 0:00797f1ebe04 170 void pairing_done(char *nodeKey, char *secretKey)
mitsarionas 0:00797f1ebe04 171 {
mitsarionas 0:00797f1ebe04 172 printf("pairing done!\n");
mitsarionas 0:00797f1ebe04 173 printf("NokeKey: %s\n", nodeKey);
mitsarionas 0:00797f1ebe04 174 printf("SecretKey: %s\n", secretKey);
mitsarionas 0:00797f1ebe04 175 }