iot_water_monitor_v2

Dependencies:   easy-connect-v16 Watchdog FP MQTTPacket RecordType-v-16 watersenor_and_temp_code

Committer:
DuyLionTran
Date:
Tue Apr 03 17:03:01 2018 +0000
Revision:
57:898fcb6692cd
Parent:
43:dcde0e66874a
;   * version 2.9.8  	03-04-2018  Minor changes. Time frame updated to IBM Watson every 60s

Who changed what in which revision?

UserRevisionLine numberNew contents of line
DuyLionTran 43:dcde0e66874a 1 /* Author: Faheem Inayat
DuyLionTran 43:dcde0e66874a 2 * Created by "Night Crue" Team @ TechShop San Jose, CA
DuyLionTran 43:dcde0e66874a 3 *
DuyLionTran 43:dcde0e66874a 4 * --- DISCLAIMER ---
DuyLionTran 43:dcde0e66874a 5 * This code is a modified version of original JSMN lirary, written by
DuyLionTran 43:dcde0e66874a 6 * *** Serge A. Zaitsev ***
DuyLionTran 43:dcde0e66874a 7 * and hosted at https://github.com/zserge/jsmn
DuyLionTran 43:dcde0e66874a 8 * Any modification to the original source is not guaranteed to be included
DuyLionTran 43:dcde0e66874a 9 * in this version. As of writing of this file, the original source is
DuyLionTran 43:dcde0e66874a 10 * licensed under MIT License
DuyLionTran 43:dcde0e66874a 11 * (http://www.opensource.org/licenses/mit-license.php).
DuyLionTran 43:dcde0e66874a 12 */
DuyLionTran 43:dcde0e66874a 13
DuyLionTran 43:dcde0e66874a 14 #include "jsmn.h"
DuyLionTran 43:dcde0e66874a 15
DuyLionTran 43:dcde0e66874a 16 /**
DuyLionTran 43:dcde0e66874a 17 * Allocates a fresh unused token from the token pull.
DuyLionTran 43:dcde0e66874a 18 */
DuyLionTran 43:dcde0e66874a 19 static jsmntok_t *jsmn_alloc_token ( jsmn_parser *parser, jsmntok_t *tokens, size_t num_tokens )
DuyLionTran 43:dcde0e66874a 20 {
DuyLionTran 43:dcde0e66874a 21 jsmntok_t *tok;
DuyLionTran 43:dcde0e66874a 22 if ( parser->toknext >= num_tokens )
DuyLionTran 43:dcde0e66874a 23 {
DuyLionTran 43:dcde0e66874a 24 return NULL ;
DuyLionTran 43:dcde0e66874a 25 }
DuyLionTran 43:dcde0e66874a 26 tok = &tokens [ parser->toknext++ ];
DuyLionTran 43:dcde0e66874a 27 tok->start = tok->end = -1;
DuyLionTran 43:dcde0e66874a 28 tok->childCount = 0;
DuyLionTran 43:dcde0e66874a 29 tok->parent = -1;
DuyLionTran 43:dcde0e66874a 30 return tok;
DuyLionTran 43:dcde0e66874a 31 }
DuyLionTran 43:dcde0e66874a 32
DuyLionTran 43:dcde0e66874a 33 /**
DuyLionTran 43:dcde0e66874a 34 * Fills token type and boundaries.
DuyLionTran 43:dcde0e66874a 35 */
DuyLionTran 43:dcde0e66874a 36 static void jsmn_fill_token ( jsmntok_t *token, jsmntype_t type, int start, int end )
DuyLionTran 43:dcde0e66874a 37 {
DuyLionTran 43:dcde0e66874a 38 token->type = type;
DuyLionTran 43:dcde0e66874a 39 token->start = start;
DuyLionTran 43:dcde0e66874a 40 token->end = end;
DuyLionTran 43:dcde0e66874a 41 token->childCount = 0;
DuyLionTran 43:dcde0e66874a 42 }
DuyLionTran 43:dcde0e66874a 43
DuyLionTran 43:dcde0e66874a 44 /**
DuyLionTran 43:dcde0e66874a 45 * Fills next available token with JSON primitive.
DuyLionTran 43:dcde0e66874a 46 */
DuyLionTran 43:dcde0e66874a 47 static int jsmn_parse_primitive ( jsmn_parser *parser, const char *js, size_t len, jsmntok_t *tokens, size_t num_tokens )
DuyLionTran 43:dcde0e66874a 48 {
DuyLionTran 43:dcde0e66874a 49 jsmntok_t *token;
DuyLionTran 43:dcde0e66874a 50 int start;
DuyLionTran 43:dcde0e66874a 51
DuyLionTran 43:dcde0e66874a 52 start = parser->pos;
DuyLionTran 43:dcde0e66874a 53
DuyLionTran 43:dcde0e66874a 54 for ( ; parser->pos < len && js [ parser->pos ] != '\0'; parser->pos++ )
DuyLionTran 43:dcde0e66874a 55 {
DuyLionTran 43:dcde0e66874a 56 switch ( js [ parser->pos ] )
DuyLionTran 43:dcde0e66874a 57 {
DuyLionTran 43:dcde0e66874a 58 case '\t':
DuyLionTran 43:dcde0e66874a 59 case '\r':
DuyLionTran 43:dcde0e66874a 60 case '\n':
DuyLionTran 43:dcde0e66874a 61 case ' ':
DuyLionTran 43:dcde0e66874a 62 case ',':
DuyLionTran 43:dcde0e66874a 63 case ']':
DuyLionTran 43:dcde0e66874a 64 case '}':
DuyLionTran 43:dcde0e66874a 65 goto found;
DuyLionTran 43:dcde0e66874a 66 }
DuyLionTran 43:dcde0e66874a 67 if ( js [ parser->pos ] < 32 || js [ parser->pos ] >= 127 )
DuyLionTran 43:dcde0e66874a 68 {
DuyLionTran 43:dcde0e66874a 69 parser->pos = start;
DuyLionTran 43:dcde0e66874a 70 return JSMN_ERROR_INVAL;
DuyLionTran 43:dcde0e66874a 71 }
DuyLionTran 43:dcde0e66874a 72 }
DuyLionTran 43:dcde0e66874a 73 /* primitive must be followed by a comma/object/array */
DuyLionTran 43:dcde0e66874a 74 parser->pos = start;
DuyLionTran 43:dcde0e66874a 75 return JSMN_ERROR_PART;
DuyLionTran 43:dcde0e66874a 76
DuyLionTran 43:dcde0e66874a 77 found: if ( tokens == NULL )
DuyLionTran 43:dcde0e66874a 78 {
DuyLionTran 43:dcde0e66874a 79 parser->pos--;
DuyLionTran 43:dcde0e66874a 80 return 0;
DuyLionTran 43:dcde0e66874a 81 }
DuyLionTran 43:dcde0e66874a 82 token = jsmn_alloc_token ( parser, tokens, num_tokens );
DuyLionTran 43:dcde0e66874a 83 if ( token == NULL )
DuyLionTran 43:dcde0e66874a 84 {
DuyLionTran 43:dcde0e66874a 85 parser->pos = start;
DuyLionTran 43:dcde0e66874a 86 return JSMN_ERROR_NOMEM;
DuyLionTran 43:dcde0e66874a 87 }
DuyLionTran 43:dcde0e66874a 88 jsmn_fill_token ( token, JSMN_PRIMITIVE, start, parser->pos );
DuyLionTran 43:dcde0e66874a 89 token->parent = parser->toksuper;
DuyLionTran 43:dcde0e66874a 90 parser->pos--;
DuyLionTran 43:dcde0e66874a 91 return 0;
DuyLionTran 43:dcde0e66874a 92 }
DuyLionTran 43:dcde0e66874a 93
DuyLionTran 43:dcde0e66874a 94 /**
DuyLionTran 43:dcde0e66874a 95 * Fills next token with JSON string.
DuyLionTran 43:dcde0e66874a 96 */
DuyLionTran 43:dcde0e66874a 97 static int jsmn_parse_string ( jsmn_parser *parser, const char *js, size_t len, jsmntok_t *tokens, size_t num_tokens, unsigned char isKey )
DuyLionTran 43:dcde0e66874a 98 {
DuyLionTran 43:dcde0e66874a 99 jsmntok_t *token;
DuyLionTran 43:dcde0e66874a 100
DuyLionTran 43:dcde0e66874a 101 int start = parser->pos;
DuyLionTran 43:dcde0e66874a 102
DuyLionTran 43:dcde0e66874a 103 parser->pos++;
DuyLionTran 43:dcde0e66874a 104
DuyLionTran 43:dcde0e66874a 105 /* Skip starting quote */
DuyLionTran 43:dcde0e66874a 106 for ( ; parser->pos < len && js [ parser->pos ] != '\0'; parser->pos++ )
DuyLionTran 43:dcde0e66874a 107 {
DuyLionTran 43:dcde0e66874a 108 char c = js [ parser->pos ];
DuyLionTran 43:dcde0e66874a 109
DuyLionTran 43:dcde0e66874a 110 /* Quote: end of string */
DuyLionTran 43:dcde0e66874a 111 if ( c == '\"' )
DuyLionTran 43:dcde0e66874a 112 {
DuyLionTran 43:dcde0e66874a 113 if ( tokens == NULL )
DuyLionTran 43:dcde0e66874a 114 {
DuyLionTran 43:dcde0e66874a 115 return 0;
DuyLionTran 43:dcde0e66874a 116 }
DuyLionTran 43:dcde0e66874a 117 token = jsmn_alloc_token ( parser, tokens, num_tokens );
DuyLionTran 43:dcde0e66874a 118 if ( token == NULL )
DuyLionTran 43:dcde0e66874a 119 {
DuyLionTran 43:dcde0e66874a 120 parser->pos = start;
DuyLionTran 43:dcde0e66874a 121 return JSMN_ERROR_NOMEM;
DuyLionTran 43:dcde0e66874a 122 }
DuyLionTran 43:dcde0e66874a 123 if ( isKey == 1 )
DuyLionTran 43:dcde0e66874a 124 {
DuyLionTran 43:dcde0e66874a 125 jsmn_fill_token ( token, JSMN_KEY, start + 1, parser->pos );
DuyLionTran 43:dcde0e66874a 126 }
DuyLionTran 43:dcde0e66874a 127 else
DuyLionTran 43:dcde0e66874a 128 {
DuyLionTran 43:dcde0e66874a 129 jsmn_fill_token ( token, JSMN_STRING, start + 1, parser->pos );
DuyLionTran 43:dcde0e66874a 130 }
DuyLionTran 43:dcde0e66874a 131 token->parent = parser->toksuper;
DuyLionTran 43:dcde0e66874a 132 return 0;
DuyLionTran 43:dcde0e66874a 133 }
DuyLionTran 43:dcde0e66874a 134
DuyLionTran 43:dcde0e66874a 135 /* Backslash: Quoted symbol expected */
DuyLionTran 43:dcde0e66874a 136 if ( c == '\\' && parser->pos + 1 < len )
DuyLionTran 43:dcde0e66874a 137 {
DuyLionTran 43:dcde0e66874a 138 int i;
DuyLionTran 43:dcde0e66874a 139 parser->pos++;
DuyLionTran 43:dcde0e66874a 140 switch ( js [ parser->pos ] )
DuyLionTran 43:dcde0e66874a 141 {
DuyLionTran 43:dcde0e66874a 142 /* Allowed escaped symbols */
DuyLionTran 43:dcde0e66874a 143 case '\"':
DuyLionTran 43:dcde0e66874a 144 case '/':
DuyLionTran 43:dcde0e66874a 145 case '\\':
DuyLionTran 43:dcde0e66874a 146 case 'b':
DuyLionTran 43:dcde0e66874a 147 case 'f':
DuyLionTran 43:dcde0e66874a 148 case 'r':
DuyLionTran 43:dcde0e66874a 149 case 'n':
DuyLionTran 43:dcde0e66874a 150 case 't':
DuyLionTran 43:dcde0e66874a 151 break;
DuyLionTran 43:dcde0e66874a 152 /* Allows escaped symbol \uXXXX */
DuyLionTran 43:dcde0e66874a 153 case 'u':
DuyLionTran 43:dcde0e66874a 154 parser->pos++;
DuyLionTran 43:dcde0e66874a 155 for ( i = 0; i < 4 && parser->pos < len && js [ parser->pos ] != '\0'; i++ )
DuyLionTran 43:dcde0e66874a 156 {
DuyLionTran 43:dcde0e66874a 157 /* If it isn't a hex character we have an error */
DuyLionTran 43:dcde0e66874a 158 if ( ! ( ( js [ parser->pos ] >= 48 && js [ parser->pos ] <= 57 ) || /* 0-9 */
DuyLionTran 43:dcde0e66874a 159 ( js [ parser->pos ] >= 65 && js [ parser->pos ] <= 70 )
DuyLionTran 43:dcde0e66874a 160 || /* A-F */
DuyLionTran 43:dcde0e66874a 161 ( js [ parser->pos ] >= 97 && js [ parser->pos ] <= 102 ) ) )
DuyLionTran 43:dcde0e66874a 162 { /* a-f */
DuyLionTran 43:dcde0e66874a 163 parser->pos = start;
DuyLionTran 43:dcde0e66874a 164 return JSMN_ERROR_INVAL;
DuyLionTran 43:dcde0e66874a 165 }
DuyLionTran 43:dcde0e66874a 166 parser->pos++;
DuyLionTran 43:dcde0e66874a 167 }
DuyLionTran 43:dcde0e66874a 168 parser->pos--;
DuyLionTran 43:dcde0e66874a 169 break;
DuyLionTran 43:dcde0e66874a 170 /* Unexpected symbol */
DuyLionTran 43:dcde0e66874a 171 default:
DuyLionTran 43:dcde0e66874a 172 parser->pos = start;
DuyLionTran 43:dcde0e66874a 173 return JSMN_ERROR_INVAL;
DuyLionTran 43:dcde0e66874a 174 }
DuyLionTran 43:dcde0e66874a 175 }
DuyLionTran 43:dcde0e66874a 176 }
DuyLionTran 43:dcde0e66874a 177 parser->pos = start;
DuyLionTran 43:dcde0e66874a 178 return JSMN_ERROR_PART;
DuyLionTran 43:dcde0e66874a 179 }
DuyLionTran 43:dcde0e66874a 180
DuyLionTran 43:dcde0e66874a 181 /**
DuyLionTran 43:dcde0e66874a 182 * Parse JSON string and fill tokens.
DuyLionTran 43:dcde0e66874a 183 */
DuyLionTran 43:dcde0e66874a 184 int jsmn_parse ( jsmn_parser *parser, const char *js, size_t len, jsmntok_t *tokens, unsigned int num_tokens )
DuyLionTran 43:dcde0e66874a 185 {
DuyLionTran 43:dcde0e66874a 186 int r;
DuyLionTran 43:dcde0e66874a 187 int i;
DuyLionTran 43:dcde0e66874a 188 jsmntok_t *token;
DuyLionTran 43:dcde0e66874a 189 int count = parser->toknext;
DuyLionTran 43:dcde0e66874a 190
DuyLionTran 43:dcde0e66874a 191 unsigned char isKey = 1;
DuyLionTran 43:dcde0e66874a 192
DuyLionTran 43:dcde0e66874a 193 for ( ; parser->pos < len && js [ parser->pos ] != '\0'; parser->pos++ )
DuyLionTran 43:dcde0e66874a 194 {
DuyLionTran 43:dcde0e66874a 195 char c;
DuyLionTran 43:dcde0e66874a 196 jsmntype_t type;
DuyLionTran 43:dcde0e66874a 197
DuyLionTran 43:dcde0e66874a 198 c = js [ parser->pos ];
DuyLionTran 43:dcde0e66874a 199 switch ( c )
DuyLionTran 43:dcde0e66874a 200 {
DuyLionTran 43:dcde0e66874a 201 case '{':
DuyLionTran 43:dcde0e66874a 202 case '[':
DuyLionTran 43:dcde0e66874a 203 count++;
DuyLionTran 43:dcde0e66874a 204 if ( tokens == NULL )
DuyLionTran 43:dcde0e66874a 205 {
DuyLionTran 43:dcde0e66874a 206 break;
DuyLionTran 43:dcde0e66874a 207 }
DuyLionTran 43:dcde0e66874a 208 token = jsmn_alloc_token ( parser, tokens, num_tokens );
DuyLionTran 43:dcde0e66874a 209 if ( token == NULL )
DuyLionTran 43:dcde0e66874a 210 return JSMN_ERROR_NOMEM;
DuyLionTran 43:dcde0e66874a 211 if ( parser->toksuper != -1 )
DuyLionTran 43:dcde0e66874a 212 {
DuyLionTran 43:dcde0e66874a 213 tokens [ parser->toksuper ].childCount++;
DuyLionTran 43:dcde0e66874a 214 token->parent = parser->toksuper;
DuyLionTran 43:dcde0e66874a 215 }
DuyLionTran 43:dcde0e66874a 216 token->type = ( c == '{' ? JSMN_OBJECT : JSMN_ARRAY );
DuyLionTran 43:dcde0e66874a 217 token->start = parser->pos;
DuyLionTran 43:dcde0e66874a 218 parser->toksuper = parser->toknext - 1;
DuyLionTran 43:dcde0e66874a 219 if ( token->type == JSMN_OBJECT )
DuyLionTran 43:dcde0e66874a 220 {
DuyLionTran 43:dcde0e66874a 221 isKey = 1;
DuyLionTran 43:dcde0e66874a 222 }
DuyLionTran 43:dcde0e66874a 223 break;
DuyLionTran 43:dcde0e66874a 224 case '}':
DuyLionTran 43:dcde0e66874a 225 case ']':
DuyLionTran 43:dcde0e66874a 226 if ( tokens == NULL )
DuyLionTran 43:dcde0e66874a 227 break;
DuyLionTran 43:dcde0e66874a 228 type = ( c == '}' ? JSMN_OBJECT : JSMN_ARRAY );
DuyLionTran 43:dcde0e66874a 229 if ( parser->toknext < 1 )
DuyLionTran 43:dcde0e66874a 230 {
DuyLionTran 43:dcde0e66874a 231 return JSMN_ERROR_INVAL;
DuyLionTran 43:dcde0e66874a 232 }
DuyLionTran 43:dcde0e66874a 233 token = &tokens [ parser->toknext - 1 ];
DuyLionTran 43:dcde0e66874a 234 for ( ;; )
DuyLionTran 43:dcde0e66874a 235 {
DuyLionTran 43:dcde0e66874a 236 if ( token->start != -1 && token->end == -1 )
DuyLionTran 43:dcde0e66874a 237 {
DuyLionTran 43:dcde0e66874a 238 if ( token->type != type )
DuyLionTran 43:dcde0e66874a 239 {
DuyLionTran 43:dcde0e66874a 240 return JSMN_ERROR_INVAL;
DuyLionTran 43:dcde0e66874a 241 }
DuyLionTran 43:dcde0e66874a 242 token->end = parser->pos + 1;
DuyLionTran 43:dcde0e66874a 243 parser->toksuper = token->parent;
DuyLionTran 43:dcde0e66874a 244 break;
DuyLionTran 43:dcde0e66874a 245 }
DuyLionTran 43:dcde0e66874a 246 if ( token->parent == -1 )
DuyLionTran 43:dcde0e66874a 247 {
DuyLionTran 43:dcde0e66874a 248 break;
DuyLionTran 43:dcde0e66874a 249 }
DuyLionTran 43:dcde0e66874a 250 token = &tokens [ token->parent ];
DuyLionTran 43:dcde0e66874a 251 }
DuyLionTran 43:dcde0e66874a 252 break;
DuyLionTran 43:dcde0e66874a 253 case '\"':
DuyLionTran 43:dcde0e66874a 254 r = jsmn_parse_string ( parser, js, len, tokens, num_tokens, isKey );
DuyLionTran 43:dcde0e66874a 255 if ( r < 0 )
DuyLionTran 43:dcde0e66874a 256 return r;
DuyLionTran 43:dcde0e66874a 257 count++;
DuyLionTran 43:dcde0e66874a 258 if ( parser->toksuper != -1 && tokens != NULL )
DuyLionTran 43:dcde0e66874a 259 tokens [ parser->toksuper ].childCount++;
DuyLionTran 43:dcde0e66874a 260 break;
DuyLionTran 43:dcde0e66874a 261 case '\t':
DuyLionTran 43:dcde0e66874a 262 case '\r':
DuyLionTran 43:dcde0e66874a 263 case '\n':
DuyLionTran 43:dcde0e66874a 264 case ' ':
DuyLionTran 43:dcde0e66874a 265 break;
DuyLionTran 43:dcde0e66874a 266 case ':':
DuyLionTran 43:dcde0e66874a 267 isKey = 0;
DuyLionTran 43:dcde0e66874a 268 parser->toksuper = parser->toknext - 1;
DuyLionTran 43:dcde0e66874a 269 break;
DuyLionTran 43:dcde0e66874a 270 case ',':
DuyLionTran 43:dcde0e66874a 271 if ( tokens != NULL && parser->toksuper != -1 && tokens [ parser->toksuper ].type != JSMN_ARRAY && tokens [ parser->toksuper ].type != JSMN_OBJECT )
DuyLionTran 43:dcde0e66874a 272 {
DuyLionTran 43:dcde0e66874a 273 parser->toksuper = tokens [ parser->toksuper ].parent;
DuyLionTran 43:dcde0e66874a 274 }
DuyLionTran 43:dcde0e66874a 275 isKey = 1;
DuyLionTran 43:dcde0e66874a 276 break;
DuyLionTran 43:dcde0e66874a 277 /* In strict mode primitives are: numbers and booleans */
DuyLionTran 43:dcde0e66874a 278 case '-':
DuyLionTran 43:dcde0e66874a 279 case '0':
DuyLionTran 43:dcde0e66874a 280 case '1':
DuyLionTran 43:dcde0e66874a 281 case '2':
DuyLionTran 43:dcde0e66874a 282 case '3':
DuyLionTran 43:dcde0e66874a 283 case '4':
DuyLionTran 43:dcde0e66874a 284 case '5':
DuyLionTran 43:dcde0e66874a 285 case '6':
DuyLionTran 43:dcde0e66874a 286 case '7':
DuyLionTran 43:dcde0e66874a 287 case '8':
DuyLionTran 43:dcde0e66874a 288 case '9':
DuyLionTran 43:dcde0e66874a 289 case 't':
DuyLionTran 43:dcde0e66874a 290 case 'f':
DuyLionTran 43:dcde0e66874a 291 case 'n':
DuyLionTran 43:dcde0e66874a 292 /* And they must not be keys of the object */
DuyLionTran 43:dcde0e66874a 293 if ( tokens != NULL && parser->toksuper != -1 )
DuyLionTran 43:dcde0e66874a 294 {
DuyLionTran 43:dcde0e66874a 295 jsmntok_t *t = &tokens [ parser->toksuper ];
DuyLionTran 43:dcde0e66874a 296 if ( t->type == JSMN_OBJECT || ( t->type == JSMN_STRING && t->childCount != 0 ) )
DuyLionTran 43:dcde0e66874a 297 {
DuyLionTran 43:dcde0e66874a 298 return JSMN_ERROR_INVAL;
DuyLionTran 43:dcde0e66874a 299 }
DuyLionTran 43:dcde0e66874a 300 }
DuyLionTran 43:dcde0e66874a 301 r = jsmn_parse_primitive ( parser, js, len, tokens, num_tokens );
DuyLionTran 43:dcde0e66874a 302 if ( r < 0 )
DuyLionTran 43:dcde0e66874a 303 return r;
DuyLionTran 43:dcde0e66874a 304 count++;
DuyLionTran 43:dcde0e66874a 305 if ( parser->toksuper != -1 && tokens != NULL )
DuyLionTran 43:dcde0e66874a 306 tokens [ parser->toksuper ].childCount++;
DuyLionTran 43:dcde0e66874a 307 break;
DuyLionTran 43:dcde0e66874a 308
DuyLionTran 43:dcde0e66874a 309 /* Unexpected char in strict mode */
DuyLionTran 43:dcde0e66874a 310 default:
DuyLionTran 43:dcde0e66874a 311 return JSMN_ERROR_INVAL;
DuyLionTran 43:dcde0e66874a 312 }
DuyLionTran 43:dcde0e66874a 313 }
DuyLionTran 43:dcde0e66874a 314
DuyLionTran 43:dcde0e66874a 315 if ( tokens != NULL )
DuyLionTran 43:dcde0e66874a 316 {
DuyLionTran 43:dcde0e66874a 317 for ( i = parser->toknext - 1; i >= 0; i-- )
DuyLionTran 43:dcde0e66874a 318 {
DuyLionTran 43:dcde0e66874a 319 /* Unmatched opened object or array */
DuyLionTran 43:dcde0e66874a 320 if ( tokens [ i ].start != -1 && tokens [ i ].end == -1 )
DuyLionTran 43:dcde0e66874a 321 {
DuyLionTran 43:dcde0e66874a 322 return JSMN_ERROR_PART;
DuyLionTran 43:dcde0e66874a 323 }
DuyLionTran 43:dcde0e66874a 324 }
DuyLionTran 43:dcde0e66874a 325 }
DuyLionTran 43:dcde0e66874a 326
DuyLionTran 43:dcde0e66874a 327 return count;
DuyLionTran 43:dcde0e66874a 328 }
DuyLionTran 43:dcde0e66874a 329
DuyLionTran 43:dcde0e66874a 330 /**
DuyLionTran 43:dcde0e66874a 331 * Creates a new parser based over a given buffer with an array of tokens
DuyLionTran 43:dcde0e66874a 332 * available.
DuyLionTran 43:dcde0e66874a 333 */
DuyLionTran 43:dcde0e66874a 334 void jsmn_init ( jsmn_parser *parser )
DuyLionTran 43:dcde0e66874a 335 {
DuyLionTran 43:dcde0e66874a 336 parser->pos = 0;
DuyLionTran 43:dcde0e66874a 337 parser->toknext = 0;
DuyLionTran 43:dcde0e66874a 338 parser->toksuper = -1;
DuyLionTran 43:dcde0e66874a 339 }
DuyLionTran 43:dcde0e66874a 340