Example node for Yodiwo's Plegma API

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

Committer:
mitsarionas
Date:
Mon Sep 28 09:13:43 2015 +0000
Revision:
8:66d34592c1ad
Parent:
5:1ef168357347
using published HTTPClient

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mitsarionas 5:1ef168357347 1 #include <string.h>
mitsarionas 5:1ef168357347 2 #include <stdlib.h>
mitsarionas 5:1ef168357347 3 #include "rtos.h"
mitsarionas 5:1ef168357347 4 #include "HTTPClient.h"
mitsarionas 5:1ef168357347 5
mitsarionas 5:1ef168357347 6 #include "system.h"
mitsarionas 5:1ef168357347 7 #include "yodiwo_api.h"
mitsarionas 5:1ef168357347 8
mitsarionas 5:1ef168357347 9
mitsarionas 5:1ef168357347 10
mitsarionas 5:1ef168357347 11
mitsarionas 5:1ef168357347 12 typedef void * (*thread_func)(void *);
mitsarionas 5:1ef168357347 13
mitsarionas 5:1ef168357347 14 typedef struct thread_info_s
mitsarionas 5:1ef168357347 15 {
mitsarionas 5:1ef168357347 16 Thread *t;
mitsarionas 5:1ef168357347 17 thread_func func;
mitsarionas 5:1ef168357347 18 void *args;
mitsarionas 5:1ef168357347 19 void *result;
mitsarionas 5:1ef168357347 20 } thread_info;
mitsarionas 5:1ef168357347 21
mitsarionas 5:1ef168357347 22 void __thread_wrapper(void const *args);
mitsarionas 5:1ef168357347 23
mitsarionas 5:1ef168357347 24 HTTPClient http;
mitsarionas 5:1ef168357347 25
mitsarionas 5:1ef168357347 26 int thread_run(thread_t *ctx, thread_func func, void * args, int priority, int stack_size)
mitsarionas 5:1ef168357347 27 {
mitsarionas 5:1ef168357347 28 thread_info *info = (thread_info *)malloc(sizeof(thread_info));
mitsarionas 5:1ef168357347 29 if (info == NULL) {
mitsarionas 5:1ef168357347 30 return -1;
mitsarionas 5:1ef168357347 31 }
mitsarionas 5:1ef168357347 32 *ctx = info;
mitsarionas 5:1ef168357347 33 info->func = func;
mitsarionas 5:1ef168357347 34 info->args = args;
mitsarionas 5:1ef168357347 35 info->result = NULL;
mitsarionas 5:1ef168357347 36
mitsarionas 5:1ef168357347 37 if (stack_size) {
mitsarionas 5:1ef168357347 38 (*ctx)->t = new Thread(__thread_wrapper, *ctx, (osPriority)priority, stack_size);
mitsarionas 5:1ef168357347 39 } else {
mitsarionas 5:1ef168357347 40 (*ctx)->t = new Thread(__thread_wrapper, *ctx, (osPriority)priority);
mitsarionas 5:1ef168357347 41 }
mitsarionas 5:1ef168357347 42 return 0;
mitsarionas 5:1ef168357347 43 }
mitsarionas 5:1ef168357347 44
mitsarionas 5:1ef168357347 45 void __thread_wrapper(void const *args)
mitsarionas 5:1ef168357347 46 {
mitsarionas 5:1ef168357347 47 thread_info *info = (thread_info *)args;
mitsarionas 5:1ef168357347 48 info->result = info->func(info->args);
mitsarionas 5:1ef168357347 49 return;
mitsarionas 5:1ef168357347 50 }
mitsarionas 5:1ef168357347 51
mitsarionas 5:1ef168357347 52 void thread_wait(int ms)
mitsarionas 5:1ef168357347 53 {
mitsarionas 5:1ef168357347 54 Thread::wait(ms);
mitsarionas 5:1ef168357347 55 }
mitsarionas 5:1ef168357347 56
mitsarionas 5:1ef168357347 57 void *thread_join(thread_t *ctx)
mitsarionas 5:1ef168357347 58 {
mitsarionas 5:1ef168357347 59 while ((*ctx)->t->get_state() != Thread::Inactive) {
mitsarionas 5:1ef168357347 60 // printf("yielding... %d\n", t.get_state());
mitsarionas 5:1ef168357347 61 // Thread::yield();
mitsarionas 5:1ef168357347 62 // Thread::wait(1000);
mitsarionas 5:1ef168357347 63 }
mitsarionas 5:1ef168357347 64 return (*ctx)->result;
mitsarionas 5:1ef168357347 65 }
mitsarionas 5:1ef168357347 66
mitsarionas 5:1ef168357347 67 int http_post(char *url, char *post_fields, char *response, size_t max_size)
mitsarionas 5:1ef168357347 68 {
mitsarionas 5:1ef168357347 69 http.dumpReqHeader(true);
mitsarionas 5:1ef168357347 70 http.dumpResHeader(true);
mitsarionas 5:1ef168357347 71 int ret;
mitsarionas 5:1ef168357347 72 //POST data
mitsarionas 5:1ef168357347 73 HTTPText params(post_fields, strlen(post_fields) + 1);
mitsarionas 5:1ef168357347 74 params.setDataType("application/x-www-form-urlencoded");
mitsarionas 5:1ef168357347 75 HTTPText inText(response, max_size);
mitsarionas 5:1ef168357347 76 printf("\nTrying to post data...\n");
mitsarionas 5:1ef168357347 77 printf("post url: %s\n", url);
mitsarionas 5:1ef168357347 78 ret = http.post(url, params, &inText);
mitsarionas 5:1ef168357347 79 if (!ret) {
mitsarionas 5:1ef168357347 80 ret = http.getHTTPResponseCode();
mitsarionas 5:1ef168357347 81 }
mitsarionas 5:1ef168357347 82 return ret;
mitsarionas 5:1ef168357347 83 }
mitsarionas 5:1ef168357347 84