utility/json_parser/parse_all_examples.c
/*
* EVALUATION AND USE OF THIS SOFTWARE IS SUBJECT TO THE TERMS AND
* CONDITIONS OF THE CONTROLLING LICENSE AGREEMENT FOUND AT LICENSE.md
* IN THIS SDK. IF YOU DO NOT AGREE TO THE LICENSE TERMS AND CONDITIONS,
* PLEASE RETURN ALL SOURCE FILES TO SILICON LABORATORIES.
* (c) Copyright 2018, Silicon Laboratories Inc. All rights reserved.
*/
#include "gos.h"
#define GOS_LOG_LIMIT (253)
/*************************************************************************************************
* Parse all the files in the 'json/' folder and display their contents
*/
gos_result_t parse_all_examples(void)
{
gos_result_t result;
gos_file_t *file_list;
{
}
else
{
{
if (GOS_FAILED(result, parse_file(file->name)))
{
break;
}
}
}
gos_file_destroy_list(file_list);
GOS_LOG("Finished");
return result;
}
/*************************************************************************************************/
{
gos_result_t result;
gos_json_parse_context_t *context = NULL;
char buffer[512];
{
.buffer = buffer,
.buffer_len = sizeof(buffer),
.reader = file_reader
};
GOS_LOG("\r\nParsing: %s", filename);
{
GOS_LOG("Failed to open: %s", filename);
}
{
GOS_LOG("Failed to initialize json parsing context");
}
{
GOS_LOG("Failed to parse json file");
}
else
{
int tok_stack[10];
int level = 0;
memset(tok_stack, 0, sizeof(tok_stack));
GOS_LOG("JSON file contents:");
for (const gos_json_tok_t *tok = gos_json_context_get_token(context, NULL, NULL); tok != NULL; tok = tok->next)
{
level = print_token(tok, level, tok_stack);
}
}
gos_file_close(handle);
gos_json_parse_context_deinit(context);
return result;
}
/*************************************************************************************************/
{
char print_buffer[128];
char *print_ptr = print_buffer;
if (level > 0)
{
if (tok_stack[level-1] >= 0)
{
while (tok_stack[level-1] == 0)
{
--level;
}
for (int l = level; l > 0; --l)
{
*print_ptr++ = ' ';
*print_ptr++ = ' ';
*print_ptr++ = ' ';
}
--tok_stack[level-1];
}
}
{
{
}
break;
{
}
break;
{
}
break;
{
}
break;
{
}
break;
{
char str[16];
}
break;
{
}
break;
{
sprintf(print_ptr, "NULL element");
}
break;
default:
{
}
break;
}
// GOS_LOG_LIMIT is maximum amount of characters GOS_LOG() will print. To print a string longer than that, use gos_write_log instead.
if ((tok->type == GOS_JSON_TYPE_STRING) && ((strlen(" ") * level) + strlen("String: ") + strlen(tok->data.str) > GOS_LOG_LIMIT))
{
}
else
{
GOS_LOG("%s", print_buffer);
}
return level;
}
/*************************************************************************************************
* The parser will call this until it returns an error or
* the 'bytes_read' parameter is return with a 0 value.
*/
{
uint32_t file_handle = (uint32_t)user;
uint32_t has_more_data;
gos_file_poll(file_handle, &has_more_data);
if (has_more_data == 0)
{
// No more data, so set this to 0 to tell the parser to stop calling this reader
*bytes_read = 0;
}
{
}
return result;
}