Example node for Yodiwo's Plegma API

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

Revision:
5:1ef168357347
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/system_mbed.cpp	Mon Sep 28 08:55:29 2015 +0000
@@ -0,0 +1,84 @@
+#include <string.h>
+#include <stdlib.h>
+#include "rtos.h"
+#include "HTTPClient.h"
+
+#include "system.h"
+#include "yodiwo_api.h"
+
+
+
+
+typedef void * (*thread_func)(void *);
+
+typedef struct thread_info_s
+{
+    Thread *t;
+    thread_func func;
+    void *args;
+    void *result;
+} thread_info;
+
+void __thread_wrapper(void const *args);
+
+HTTPClient http;
+
+int thread_run(thread_t *ctx, thread_func func, void * args, int priority, int stack_size)
+{
+    thread_info *info = (thread_info *)malloc(sizeof(thread_info));
+    if (info == NULL) {
+        return -1;
+    }    
+    *ctx = info;
+    info->func = func;
+    info->args = args;
+    info->result = NULL;
+
+    if (stack_size) {
+        (*ctx)->t = new Thread(__thread_wrapper, *ctx, (osPriority)priority, stack_size);
+    } else {
+        (*ctx)->t = new Thread(__thread_wrapper, *ctx, (osPriority)priority);
+    }
+    return 0;
+}
+
+void __thread_wrapper(void const *args)
+{
+    thread_info *info = (thread_info *)args;
+    info->result = info->func(info->args);
+    return;
+}
+
+void thread_wait(int ms)
+{
+    Thread::wait(ms);
+}
+
+void *thread_join(thread_t *ctx)
+{
+    while ((*ctx)->t->get_state() != Thread::Inactive) {
+//        printf("yielding... %d\n", t.get_state());
+//        Thread::yield();
+//        Thread::wait(1000);
+    }
+    return (*ctx)->result;
+}
+
+int http_post(char *url, char *post_fields, char *response, size_t max_size)
+{
+    http.dumpReqHeader(true);
+    http.dumpResHeader(true);
+    int ret;
+        //POST data
+    HTTPText params(post_fields, strlen(post_fields) + 1);
+    params.setDataType("application/x-www-form-urlencoded");
+    HTTPText inText(response, max_size);
+    printf("\nTrying to post data...\n");
+    printf("post url: %s\n", url);
+    ret = http.post(url, params, &inText);
+    if (!ret) {
+        ret = http.getHTTPResponseCode();
+    }
+    return ret;
+}
+