Yihui Xiong
/
msgpuck_example
a test of msgpuck library
main.cpp@0:039ecdc0618b, 2014-11-26 (annotated)
- Committer:
- yihui
- Date:
- Wed Nov 26 09:53:31 2014 +0000
- Revision:
- 0:039ecdc0618b
initial
Who changed what in which revision?
User | Revision | Line number | New 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 | } |