CITY3032-wifi-mqtt

Committer:
reedas
Date:
Sat Nov 13 12:02:49 2021 +0000
Revision:
5:f62a9e4a499a
Parent:
4:7ebc3d28bcb2
trying to include mbed

Who changed what in which revision?

UserRevisionLine numberNew contents of line
reedas 4:7ebc3d28bcb2 1 /*
reedas 4:7ebc3d28bcb2 2 * Copyright 2019-2021, Cypress Semiconductor Corporation (an Infineon company) or
reedas 4:7ebc3d28bcb2 3 * an affiliate of Cypress Semiconductor Corporation. All rights reserved.
reedas 4:7ebc3d28bcb2 4 *
reedas 4:7ebc3d28bcb2 5 * This software, including source code, documentation and related
reedas 4:7ebc3d28bcb2 6 * materials ("Software") is owned by Cypress Semiconductor Corporation
reedas 4:7ebc3d28bcb2 7 * or one of its affiliates ("Cypress") and is protected by and subject to
reedas 4:7ebc3d28bcb2 8 * worldwide patent protection (United States and foreign),
reedas 4:7ebc3d28bcb2 9 * United States copyright laws and international treaty provisions.
reedas 4:7ebc3d28bcb2 10 * Therefore, you may use this Software only as provided in the license
reedas 4:7ebc3d28bcb2 11 * agreement accompanying the software package from which you
reedas 4:7ebc3d28bcb2 12 * obtained this Software ("EULA").
reedas 4:7ebc3d28bcb2 13 * If no EULA applies, Cypress hereby grants you a personal, non-exclusive,
reedas 4:7ebc3d28bcb2 14 * non-transferable license to copy, modify, and compile the Software
reedas 4:7ebc3d28bcb2 15 * source code solely for use in connection with Cypress's
reedas 4:7ebc3d28bcb2 16 * integrated circuit products. Any reproduction, modification, translation,
reedas 4:7ebc3d28bcb2 17 * compilation, or representation of this Software except as specified
reedas 4:7ebc3d28bcb2 18 * above is prohibited without the express written permission of Cypress.
reedas 4:7ebc3d28bcb2 19 *
reedas 4:7ebc3d28bcb2 20 * Disclaimer: THIS SOFTWARE IS PROVIDED AS-IS, WITH NO WARRANTY OF ANY KIND,
reedas 4:7ebc3d28bcb2 21 * EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, NONINFRINGEMENT, IMPLIED
reedas 4:7ebc3d28bcb2 22 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. Cypress
reedas 4:7ebc3d28bcb2 23 * reserves the right to make changes to the Software without notice. Cypress
reedas 4:7ebc3d28bcb2 24 * does not assume any liability arising out of the application or use of the
reedas 4:7ebc3d28bcb2 25 * Software or any product or circuit described in the Software. Cypress does
reedas 4:7ebc3d28bcb2 26 * not authorize its products for use in any products where a malfunction or
reedas 4:7ebc3d28bcb2 27 * failure of the Cypress product may reasonably be expected to result in
reedas 4:7ebc3d28bcb2 28 * significant property damage, injury or death ("High Risk Product"). By
reedas 4:7ebc3d28bcb2 29 * including Cypress's product in a High Risk Product, the manufacturer
reedas 4:7ebc3d28bcb2 30 * of such system or application assumes all risk of such use and in doing
reedas 4:7ebc3d28bcb2 31 * so agrees to indemnify Cypress against all liability.
reedas 4:7ebc3d28bcb2 32 */
reedas 4:7ebc3d28bcb2 33 /**
reedas 4:7ebc3d28bcb2 34 * @file
reedas 4:7ebc3d28bcb2 35 * The JSON parser utility library provides helper functions to parse JSON objects
reedas 4:7ebc3d28bcb2 36 */
reedas 4:7ebc3d28bcb2 37 #pragma once
reedas 4:7ebc3d28bcb2 38
reedas 4:7ebc3d28bcb2 39 #include <stdint.h>
reedas 4:7ebc3d28bcb2 40 #include <stdbool.h>
reedas 4:7ebc3d28bcb2 41 #include "cy_result_mw.h"
reedas 4:7ebc3d28bcb2 42
reedas 4:7ebc3d28bcb2 43 #ifdef __cplusplus
reedas 4:7ebc3d28bcb2 44 extern "C" {
reedas 4:7ebc3d28bcb2 45 #endif
reedas 4:7ebc3d28bcb2 46
reedas 4:7ebc3d28bcb2 47 /**
reedas 4:7ebc3d28bcb2 48 *
reedas 4:7ebc3d28bcb2 49 * @addtogroup json_utils
reedas 4:7ebc3d28bcb2 50 *
reedas 4:7ebc3d28bcb2 51 * The JSON format is often used for serializing and transmitting structured data over a network connection.
reedas 4:7ebc3d28bcb2 52 * It is used primarily to transmit data between a server and web application, serving as an alternative to XML.
reedas 4:7ebc3d28bcb2 53 * JSON is JavaScript Object Notation. The JSON parser utility library provides helper functions to parse JSON objects and
reedas 4:7ebc3d28bcb2 54 * calls the function registered by the caller
reedas 4:7ebc3d28bcb2 55 *
reedas 4:7ebc3d28bcb2 56 */
reedas 4:7ebc3d28bcb2 57 /******************************************************
reedas 4:7ebc3d28bcb2 58 * Macros
reedas 4:7ebc3d28bcb2 59 ******************************************************/
reedas 4:7ebc3d28bcb2 60
reedas 4:7ebc3d28bcb2 61 /******************************************************
reedas 4:7ebc3d28bcb2 62 * Constants
reedas 4:7ebc3d28bcb2 63 ******************************************************/
reedas 4:7ebc3d28bcb2 64 /** Results returned by JSON library */
reedas 4:7ebc3d28bcb2 65 #define CY_RSLT_MODULE_JSON_ERR_CODE_START (0) /** JSON parser result code base */
reedas 4:7ebc3d28bcb2 66 #define CY_RSLT_JSON_ERROR_BASE CY_RSLT_CREATE(CY_RSLT_TYPE_ERROR, CY_RSLT_MODULE_JSON_BASE, CY_RSLT_MODULE_JSON_ERR_CODE_START)
reedas 4:7ebc3d28bcb2 67
reedas 4:7ebc3d28bcb2 68 #define CY_RSLT_JSON_GENERIC_ERROR ((cy_rslt_t)(CY_RSLT_JSON_ERROR_BASE + 1)) /** JSON parser generic error result */
reedas 4:7ebc3d28bcb2 69
reedas 4:7ebc3d28bcb2 70 #define OBJECT_START_TOKEN '{'
reedas 4:7ebc3d28bcb2 71 #define OBJECT_END_TOKEN '}'
reedas 4:7ebc3d28bcb2 72
reedas 4:7ebc3d28bcb2 73 #define ARRAY_START_TOKEN '['
reedas 4:7ebc3d28bcb2 74 #define ARRAY_END_TOKEN ']'
reedas 4:7ebc3d28bcb2 75
reedas 4:7ebc3d28bcb2 76 #define STRING_TOKEN '"'
reedas 4:7ebc3d28bcb2 77
reedas 4:7ebc3d28bcb2 78 #define START_OF_VALUE ':'
reedas 4:7ebc3d28bcb2 79
reedas 4:7ebc3d28bcb2 80 #define COMMA_SEPARATOR ','
reedas 4:7ebc3d28bcb2 81
reedas 4:7ebc3d28bcb2 82 #define ESCAPE_TOKEN '\\'
reedas 4:7ebc3d28bcb2 83
reedas 4:7ebc3d28bcb2 84 #define TRUE_TOKEN 't'
reedas 4:7ebc3d28bcb2 85
reedas 4:7ebc3d28bcb2 86 #define FALSE_TOKEN 'f'
reedas 4:7ebc3d28bcb2 87
reedas 4:7ebc3d28bcb2 88 #define NULL_TOKEN 'n'
reedas 4:7ebc3d28bcb2 89
reedas 4:7ebc3d28bcb2 90 /******************************************************
reedas 4:7ebc3d28bcb2 91 * Enumerations
reedas 4:7ebc3d28bcb2 92 ******************************************************/
reedas 4:7ebc3d28bcb2 93 /******************************************************************************/
reedas 4:7ebc3d28bcb2 94 /** \addtogroup group_json_enums
reedas 4:7ebc3d28bcb2 95 * Documentation of all the enums provided by JSON parser utility library.
reedas 4:7ebc3d28bcb2 96 *//** \{ */
reedas 4:7ebc3d28bcb2 97 /******************************************************************************/
reedas 4:7ebc3d28bcb2 98
reedas 4:7ebc3d28bcb2 99 /** JSON data types */
reedas 4:7ebc3d28bcb2 100 typedef enum
reedas 4:7ebc3d28bcb2 101 {
reedas 4:7ebc3d28bcb2 102 JSON_STRING_TYPE, /**< JSON string datatype */
reedas 4:7ebc3d28bcb2 103 JSON_NUMBER_TYPE, /**< JSON integer datatype */
reedas 4:7ebc3d28bcb2 104 JSON_VALUE_TYPE, /**< JSON value datatype.
reedas 4:7ebc3d28bcb2 105 **< This type is deprecated and it will be removed in the future release.
reedas 4:7ebc3d28bcb2 106 */
reedas 4:7ebc3d28bcb2 107 JSON_FLOAT_TYPE, /**< JSON float datatype */
reedas 4:7ebc3d28bcb2 108 JSON_ARRAY_TYPE, /**< JSON array datatype */
reedas 4:7ebc3d28bcb2 109 JSON_OBJECT_TYPE, /**< JSON object */
reedas 4:7ebc3d28bcb2 110 JSON_BOOLEAN_TYPE, /**< JSON boolean datatype */
reedas 4:7ebc3d28bcb2 111 JSON_NULL_TYPE, /**< JSON null object */
reedas 4:7ebc3d28bcb2 112 UNKNOWN_JSON_TYPE /**< JSON unknown type */
reedas 4:7ebc3d28bcb2 113 } cy_JSON_type_t;
reedas 4:7ebc3d28bcb2 114
reedas 4:7ebc3d28bcb2 115 /** \} */
reedas 4:7ebc3d28bcb2 116
reedas 4:7ebc3d28bcb2 117 /******************************************************
reedas 4:7ebc3d28bcb2 118 * Type Definitions
reedas 4:7ebc3d28bcb2 119 ******************************************************/
reedas 4:7ebc3d28bcb2 120 /******************************************************************************/
reedas 4:7ebc3d28bcb2 121 /** \addtogroup group_json_structures
reedas 4:7ebc3d28bcb2 122 * Documentation of the data structures defined and used by JSON parser utility library.
reedas 4:7ebc3d28bcb2 123 *//** \{ */
reedas 4:7ebc3d28bcb2 124 /******************************************************************************/
reedas 4:7ebc3d28bcb2 125
reedas 4:7ebc3d28bcb2 126 /******************************************************
reedas 4:7ebc3d28bcb2 127 * Structures
reedas 4:7ebc3d28bcb2 128 ******************************************************/
reedas 4:7ebc3d28bcb2 129 /** JSON parser object */
reedas 4:7ebc3d28bcb2 130 typedef struct cy_JSON_object {
reedas 4:7ebc3d28bcb2 131
reedas 4:7ebc3d28bcb2 132 char* object_string; /**< JSON object as a string */
reedas 4:7ebc3d28bcb2 133 uint8_t object_string_length; /**< Length of the JSON string */
reedas 4:7ebc3d28bcb2 134 cy_JSON_type_t value_type; /**< JSON data type of value parsed */
reedas 4:7ebc3d28bcb2 135 char* value; /**< JSON string value parsed */
reedas 4:7ebc3d28bcb2 136 uint16_t value_length; /**< length of string value parsed */
reedas 4:7ebc3d28bcb2 137 uint32_t intval; /**< JSON integer value parsed */
reedas 4:7ebc3d28bcb2 138 float floatval; /**< JSON float value parsed */
reedas 4:7ebc3d28bcb2 139 bool boolval; /**< JSON boolean value parsed */
reedas 4:7ebc3d28bcb2 140 struct cy_JSON_object* parent_object; /**< Pointer to parent JSON object */
reedas 4:7ebc3d28bcb2 141 } cy_JSON_object_t;
reedas 4:7ebc3d28bcb2 142
reedas 4:7ebc3d28bcb2 143 /** Callback function used for registering with JSON parse
reedas 4:7ebc3d28bcb2 144 *
reedas 4:7ebc3d28bcb2 145 * @param[in] json_object : JSON object which contains the key=value pair parsed by the JSON parser
reedas 4:7ebc3d28bcb2 146 * @param[in] arg : User argument passed in when registering the callback
reedas 4:7ebc3d28bcb2 147 *
reedas 4:7ebc3d28bcb2 148 * @return cy_rslt_t
reedas 4:7ebc3d28bcb2 149 */
reedas 4:7ebc3d28bcb2 150 typedef cy_rslt_t (*cy_JSON_callback_t)( cy_JSON_object_t* json_object, void *arg );
reedas 4:7ebc3d28bcb2 151
reedas 4:7ebc3d28bcb2 152 /** \} */
reedas 4:7ebc3d28bcb2 153
reedas 4:7ebc3d28bcb2 154 #define JSON_IS_NOT_ESC_CHAR( ch ) ( ( ch != '\b' ) && \
reedas 4:7ebc3d28bcb2 155 ( ch != '\f' ) && \
reedas 4:7ebc3d28bcb2 156 ( ch != '\n' ) && \
reedas 4:7ebc3d28bcb2 157 ( ch != '\r' ) && \
reedas 4:7ebc3d28bcb2 158 ( ch != '\t' ) && \
reedas 4:7ebc3d28bcb2 159 ( ch != '\"' ) && \
reedas 4:7ebc3d28bcb2 160 ( ch != '\\' ) )
reedas 4:7ebc3d28bcb2 161
reedas 4:7ebc3d28bcb2 162 /******************************************************
reedas 4:7ebc3d28bcb2 163 * Global Variables
reedas 4:7ebc3d28bcb2 164 ******************************************************/
reedas 4:7ebc3d28bcb2 165
reedas 4:7ebc3d28bcb2 166 /*****************************************************************************/
reedas 4:7ebc3d28bcb2 167 /**
reedas 4:7ebc3d28bcb2 168 *
reedas 4:7ebc3d28bcb2 169 * @addtogroup group_json_func
reedas 4:7ebc3d28bcb2 170 *
reedas 4:7ebc3d28bcb2 171 * The JSON parser utility library provides helper functions to parse JSON objects
reedas 4:7ebc3d28bcb2 172 *
reedas 4:7ebc3d28bcb2 173 *
reedas 4:7ebc3d28bcb2 174 * @{
reedas 4:7ebc3d28bcb2 175 */
reedas 4:7ebc3d28bcb2 176 /*****************************************************************************/
reedas 4:7ebc3d28bcb2 177
reedas 4:7ebc3d28bcb2 178
reedas 4:7ebc3d28bcb2 179 /** Register callback to be invoked by JSON parser while parsing the JSON data
reedas 4:7ebc3d28bcb2 180 *
reedas 4:7ebc3d28bcb2 181 * @param[in] json_callback : Pointer to the callback function to be invoked while parsing the JSON data
reedas 4:7ebc3d28bcb2 182 * @param[in] arg : User argument passed in when registering the callback
reedas 4:7ebc3d28bcb2 183 *
reedas 4:7ebc3d28bcb2 184 * @return cy_rslt_t
reedas 4:7ebc3d28bcb2 185 */
reedas 4:7ebc3d28bcb2 186 cy_rslt_t cy_JSON_parser_register_callback( cy_JSON_callback_t json_callback, void *arg );
reedas 4:7ebc3d28bcb2 187
reedas 4:7ebc3d28bcb2 188 /** Returns the current callback function registered with the JSON parser
reedas 4:7ebc3d28bcb2 189 *
reedas 4:7ebc3d28bcb2 190 * @return @ref cy_JSON_callback_t
reedas 4:7ebc3d28bcb2 191 */
reedas 4:7ebc3d28bcb2 192 cy_JSON_callback_t cy_JSON_parser_get_callback( void );
reedas 4:7ebc3d28bcb2 193
reedas 4:7ebc3d28bcb2 194 /** Parse the JSON data.
reedas 4:7ebc3d28bcb2 195 *
reedas 4:7ebc3d28bcb2 196 * This function will parse the JSON input string through a single parse, calling a callback whenever it encounters milestones
reedas 4:7ebc3d28bcb2 197 * an object, passing in object name, JSON value type, and a value (if value is string or number )
reedas 4:7ebc3d28bcb2 198 *
reedas 4:7ebc3d28bcb2 199 * @param[in] json_input : Pointer to the JSON data
reedas 4:7ebc3d28bcb2 200 * @param[in] input_length : Length of the JSON data pointed by `json_input1`
reedas 4:7ebc3d28bcb2 201 *
reedas 4:7ebc3d28bcb2 202 * @return cy_rslt_t
reedas 4:7ebc3d28bcb2 203 *
reedas 4:7ebc3d28bcb2 204 * @note: Currently escape values are not supported.
reedas 4:7ebc3d28bcb2 205 */
reedas 4:7ebc3d28bcb2 206 cy_rslt_t cy_JSON_parser( const char* json_input, uint32_t input_length );
reedas 4:7ebc3d28bcb2 207
reedas 4:7ebc3d28bcb2 208 /** @} */
reedas 4:7ebc3d28bcb2 209
reedas 4:7ebc3d28bcb2 210 #ifdef __cplusplus
reedas 4:7ebc3d28bcb2 211 } /*extern "C" */
reedas 4:7ebc3d28bcb2 212 #endif