a test of msgpuck library

Dependencies:   mbed msgpuck

Committer:
yihui
Date:
Wed Nov 26 09:53:31 2014 +0000
Revision:
0:039ecdc0618b
initial

Who changed what in which revision?

UserRevisionLine numberNew contents of line
yihui 0:039ecdc0618b 1
yihui 0:039ecdc0618b 2 #include "msgpuck.h" // Must be included before including mbed.h
yihui 0:039ecdc0618b 3 #include "mbed.h"
yihui 0:039ecdc0618b 4
yihui 0:039ecdc0618b 5 DigitalOut myled(LED1);
yihui 0:039ecdc0618b 6
yihui 0:039ecdc0618b 7 char buf[64];
yihui 0:039ecdc0618b 8 char strbuf[32] = {0};
yihui 0:039ecdc0618b 9 int strlength = 0;
yihui 0:039ecdc0618b 10
yihui 0:039ecdc0618b 11
yihui 0:039ecdc0618b 12 int msgpuck_test(void)
yihui 0:039ecdc0618b 13 {
yihui 0:039ecdc0618b 14 printf("msgpuck example\n");
yihui 0:039ecdc0618b 15
yihui 0:039ecdc0618b 16 char *w = buf;
yihui 0:039ecdc0618b 17 w = mp_encode_array(w, 4);
yihui 0:039ecdc0618b 18 w = mp_encode_uint(w, 10);
yihui 0:039ecdc0618b 19 w = mp_encode_str(w, "hello msgpuck", strlen("hello msgpuck"));
yihui 0:039ecdc0618b 20 w = mp_encode_bool(w, true);
yihui 0:039ecdc0618b 21 w = mp_encode_double(w, 3.1415);
yihui 0:039ecdc0618b 22
yihui 0:039ecdc0618b 23 {
yihui 0:039ecdc0618b 24 const char *b = buf;
yihui 0:039ecdc0618b 25 char *end = w;
yihui 0:039ecdc0618b 26 bool is_invalid = mp_check(&b, end);
yihui 0:039ecdc0618b 27 if (is_invalid) {
yihui 0:039ecdc0618b 28 printf("message invalid\n");
yihui 0:039ecdc0618b 29 } else {
yihui 0:039ecdc0618b 30 printf("message length: %d\n", end - buf);
yihui 0:039ecdc0618b 31 }
yihui 0:039ecdc0618b 32 }
yihui 0:039ecdc0618b 33
yihui 0:039ecdc0618b 34 {
yihui 0:039ecdc0618b 35 uint32_t size;
yihui 0:039ecdc0618b 36 uint64_t ival;
yihui 0:039ecdc0618b 37 const char *sval;
yihui 0:039ecdc0618b 38 uint32_t sval_len;
yihui 0:039ecdc0618b 39 bool bval;
yihui 0:039ecdc0618b 40 double dval;
yihui 0:039ecdc0618b 41
yihui 0:039ecdc0618b 42 const char *r = buf;
yihui 0:039ecdc0618b 43 size = mp_decode_array(&r);
yihui 0:039ecdc0618b 44 /* size is 4 */
yihui 0:039ecdc0618b 45
yihui 0:039ecdc0618b 46 ival = mp_decode_uint(&r);
yihui 0:039ecdc0618b 47 /* ival is 10; */
yihui 0:039ecdc0618b 48 printf("unsigned int: %u\n", (uint32_t)ival);
yihui 0:039ecdc0618b 49
yihui 0:039ecdc0618b 50 sval = mp_decode_str(&r, &sval_len);
yihui 0:039ecdc0618b 51 /* sval is "hello world", sval_len is strlen("hello world") */
yihui 0:039ecdc0618b 52
yihui 0:039ecdc0618b 53 strlength = sval_len;
yihui 0:039ecdc0618b 54 if (strlength > (sizeof(strbuf) - 1)) {
yihui 0:039ecdc0618b 55 strlength = sizeof(strbuf) - 1;
yihui 0:039ecdc0618b 56 }
yihui 0:039ecdc0618b 57 memcpy(strbuf, sval, strlength);
yihui 0:039ecdc0618b 58 strbuf[strlength] = '\0';
yihui 0:039ecdc0618b 59 printf("string length: %d\n", strlength);
yihui 0:039ecdc0618b 60 printf("String: %s\n", strbuf);
yihui 0:039ecdc0618b 61
yihui 0:039ecdc0618b 62 bval = mp_decode_bool(&r);
yihui 0:039ecdc0618b 63 /* bval is true */
yihui 0:039ecdc0618b 64 printf("bool: %s\n", bval ? "true" : "false");
yihui 0:039ecdc0618b 65
yihui 0:039ecdc0618b 66 dval = mp_decode_double(&r);
yihui 0:039ecdc0618b 67 /* dval is 3.1415 */
yihui 0:039ecdc0618b 68 printf("float: %f\n", dval);
yihui 0:039ecdc0618b 69
yihui 0:039ecdc0618b 70 printf("[%d, \"%s\", %s, %f]\n", (uint32_t)ival, strbuf, bval ? "true" : "false", (float)dval);
yihui 0:039ecdc0618b 71
yihui 0:039ecdc0618b 72 //assert(r == w);
yihui 0:039ecdc0618b 73 if (r != w) {
yihui 0:039ecdc0618b 74 printf("parse error\n");
yihui 0:039ecdc0618b 75 }
yihui 0:039ecdc0618b 76 }
yihui 0:039ecdc0618b 77
yihui 0:039ecdc0618b 78 return 0;
yihui 0:039ecdc0618b 79 }
yihui 0:039ecdc0618b 80
yihui 0:039ecdc0618b 81 int main() {
yihui 0:039ecdc0618b 82 msgpuck_test();
yihui 0:039ecdc0618b 83
yihui 0:039ecdc0618b 84 while(1) {
yihui 0:039ecdc0618b 85 myled = 1;
yihui 0:039ecdc0618b 86 wait(0.2);
yihui 0:039ecdc0618b 87 myled = 0;
yihui 0:039ecdc0618b 88 wait(0.2);
yihui 0:039ecdc0618b 89 }
yihui 0:039ecdc0618b 90 }