Example node for Yodiwo's Plegma API
Dependencies: EthernetInterface FXOS8700Q HTTPClient HTTPD MQTTS SDFileSystem YodiwoPlegma mbed-rpc mbed-rtos mbed wolfSSL
Diff: main.cpp
- Revision:
- 0:00797f1ebe04
- Child:
- 2:b7489c070d1f
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Tue Sep 01 10:23:13 2015 +0000 @@ -0,0 +1,175 @@ +#include "mbed.h" +#include "rtos.h" +#include "EthernetInterface.h" +#include "MQTTEthernet.h" +#include "MQTTClient.h" +#include "HTTPD.h" +//#include "HTTPServer.h" +//#include "LocalFileSystem.h" +#include "SDFileSystem.h" // SD File System functions +//#include "HTTPRequestHandler.h" +#include "FsHandler.h" +#include "RpcHandler.h" +#include "pairing_backend.h" + +#define DAT0 PTE3 // MOSI +#define CMD PTE1 // MISO +#define CLK PTE2 // SCLK +#define CD PTE4 // CS + + +EthernetInterface eth; + +DigitalOut led1(LED1); +InterruptIn sw2(SW2); +uint32_t button_pressed; +Thread *thread2; +//HTTPServer server; +HTTPD *httpd; +// Instantiate a local file system handler named 'local' which will be used later to access files on the mbed. +//LocalFileSystem local("local"); + + +SDFileSystem sd(DAT0, CMD, CLK, CD, "sd"); // MOSI, MISO, SCLK, CS +//Serial pc(USBTX, USBRX); // Virtual COM Port + + +pairing_context pairing_state; + +void pairing_done(char *nodeKey, char *secretKey); + +void sw2_press(void) +{ + thread2->signal_set(0x1); +} + +void led_thread(void const *argument) +{ + while (true) { + led1 = !led1; + Thread::wait(1000); + } +} + +void button_thread(void const *argument) +{ + while (true) { + Thread::signal_wait(0x1); + button_pressed++; + } +} + +void httpd_thread(void const *arg) +{ +// HTTPD *server; +// server = HTTPD::getInstance(); +// +// server->start(8080); +} + +void callback_pairing (int id); + +int main() +{ + Thread thread(led_thread); +// thread2 = new Thread(button_thread); + +// FILE *File = fopen("/sd/sdfile.txt", "w"); // open file +// if(File == NULL) { // check if present +// printf("No SD Card or bad format\n"); // print message +// } else { // otherwise +// printf("Ready to write\n"); // message preparing to write +// } +// fprintf(File, "FRDM-K64F"); // write data +// fclose(File); // close file on SD + + + eth.init(); + + eth.connect(); + printf("IP Address is %s\n", eth.getIPAddress()); + +// MQTTEthernet ipstack = MQTTEthernet(); +// MQTT::Client<MQTTEthernet, Countdown> client = MQTT::Client<MQTTEthernet, Countdown>(ipstack); +// + +// TCPSocketConnection sock; +// sock.connect("mbed.org", 80); +// +// char http_cmd[] = "GET /media/uploads/mbed_official/hello.txt HTTP/1.0\n\n"; +// sock.send_all(http_cmd, sizeof(http_cmd)-1); +// +// char buffer[300]; +// int ret; +// while (true) { +// ret = sock.receive(buffer, sizeof(buffer)-1); +// if (ret <= 0) +// break; +// buffer[ret] = '\0'; +// printf("Received %d chars from server:\n%s\n", ret, buffer); +// } +// +// sock.close(); + +// HTTPFsRequestHandler::mount("/sd/", "/"); +// server.addHandler<HTTPFsRequestHandler>("/"); + +// HTTPFsRequestHandler::mount("/sd/", "/"); +// server.addHandler<HTTPRpcRequestHandler>("/"); +// +// if (!server.start(80, ð)) { +// error("Server not starting !"); +// exit(0); +// } +// + httpd = new HTTPD; +// httpd->attach("/cgi-bin/", &callback_cgi); +// httpd->attach("/ws/", &callback_ws); + httpd->attach("/pairing_functions/", &callback_pairing); + httpd->attach("/", "/sd/www/"); + httpd->start(80); + +// Thread thread3(httpd_thread); +// eth.disconnect(); +// + + button_pressed = 0; + sw2.fall(&sw2_press); + while (true) { + Thread::wait(5000); +// printf("SW2 was pressed (last 5 seconds): %d \n", button_pressed); + fflush(stdout); +// button_pressed = 0; + } +} + +void callback_pairing (int id) { + int i, n; + char buf[256]; + + if (!strcmp(httpd->getFilename(id), "start_pairing")) { + printf("starting pairing...\n"); + pairing_context_init_with_defaults(&pairing_state, pairing_done); + start_pairing(&pairing_state); + } + strcpy(buf, httpd->getFilename(id)); + strcat(buf, "\r\n"); + strcat(buf, httpd->getQueryString(id)); + strcat(buf, "\r\n"); + n = strlen(buf); + + i = httpd->receive(id, &buf[n], sizeof(buf) - n); + if (i < 0) return; + i += n; + buf[i] = 0; + + printf("CGI %d %s\r\n", id, buf); + httpd->send(id, buf, i, "Content-Type: text/plain\r\n"); +} + +void pairing_done(char *nodeKey, char *secretKey) +{ + printf("pairing done!\n"); + printf("NokeKey: %s\n", nodeKey); + printf("SecretKey: %s\n", secretKey); +}