Example node for Yodiwo's Plegma API
Dependencies: EthernetInterface FXOS8700Q HTTPClient HTTPD MQTTS SDFileSystem YodiwoPlegma mbed-rpc mbed-rtos mbed wolfSSL
system_mbed.cpp@8:66d34592c1ad, 2015-09-28 (annotated)
- 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?
User | Revision | Line number | New 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 |