CITY3032-wifi-mqtt

Committer:
reedas
Date:
Sat Nov 13 11:31:22 2021 +0000
Revision:
4:7ebc3d28bcb2
flattened

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 #pragma once
reedas 4:7ebc3d28bcb2 34
reedas 4:7ebc3d28bcb2 35 #include <stdint.h>
reedas 4:7ebc3d28bcb2 36 #include "cy_result.h"
reedas 4:7ebc3d28bcb2 37
reedas 4:7ebc3d28bcb2 38 #ifdef __cplusplus
reedas 4:7ebc3d28bcb2 39 extern "C" {
reedas 4:7ebc3d28bcb2 40 #endif
reedas 4:7ebc3d28bcb2 41
reedas 4:7ebc3d28bcb2 42 /**
reedas 4:7ebc3d28bcb2 43 *
reedas 4:7ebc3d28bcb2 44 * @addtogroup group_utils_enums
reedas 4:7ebc3d28bcb2 45 *
reedas 4:7ebc3d28bcb2 46 * Cypress middleware APIs return results of type cy_rslt_t and comprise of three parts:
reedas 4:7ebc3d28bcb2 47 * - module base
reedas 4:7ebc3d28bcb2 48 * - type
reedas 4:7ebc3d28bcb2 49 * - error code
reedas 4:7ebc3d28bcb2 50 *
reedas 4:7ebc3d28bcb2 51 * \par Result Format
reedas 4:7ebc3d28bcb2 52 *
reedas 4:7ebc3d28bcb2 53 \verbatim
reedas 4:7ebc3d28bcb2 54 Module base Type Library specific error code
reedas 4:7ebc3d28bcb2 55 +------------------------------+------+------------------------------+
reedas 4:7ebc3d28bcb2 56 |CY_RSLT_MODULE_MIDDLEWARE_BASE| 0x2 | Error Code |
reedas 4:7ebc3d28bcb2 57 +------------------------------+------+------------------------------+
reedas 4:7ebc3d28bcb2 58 14-bits 2-bits 16-bits
reedas 4:7ebc3d28bcb2 59
reedas 4:7ebc3d28bcb2 60 Refer to the macro section of this document for library specific error codes.
reedas 4:7ebc3d28bcb2 61 \endverbatim
reedas 4:7ebc3d28bcb2 62 *
reedas 4:7ebc3d28bcb2 63 * The data structure cy_rslt_t is part of cy_result.h located in <core_lib/include>
reedas 4:7ebc3d28bcb2 64 *
reedas 4:7ebc3d28bcb2 65 * Module base: This base is derived from CY_RSLT_MODULE_MIDDLEWARE_BASE (defined in cy_result.h) and is an offset of the CY_RSLT_MODULE_MIDDLEWARE_BASE
reedas 4:7ebc3d28bcb2 66 * The details of the offset and the middleware base are defined below
reedas 4:7ebc3d28bcb2 67 *
reedas 4:7ebc3d28bcb2 68 * Type: This type is defined in cy_result.h and can be one of CY_RSLT_TYPE_FATAL, CY_RSLT_TYPE_ERROR, CY_RSLT_TYPE_WARNING or CY_RSLT_TYPE_INFO. AWS library error codes are of type CY_RSLT_TYPE_ERROR
reedas 4:7ebc3d28bcb2 69 *
reedas 4:7ebc3d28bcb2 70 * Library specific error code: These error codes are library specific and defined in macro section of the respetcive libraries
reedas 4:7ebc3d28bcb2 71 *
reedas 4:7ebc3d28bcb2 72 * Helper macros used for creating the library specific result are provided as part of cy_result.h
reedas 4:7ebc3d28bcb2 73 *
reedas 4:7ebc3d28bcb2 74 * Each middleware module has been reserved with 128 error codes
reedas 4:7ebc3d28bcb2 75 *
reedas 4:7ebc3d28bcb2 76 *
reedas 4:7ebc3d28bcb2 77 *
reedas 4:7ebc3d28bcb2 78 * @{
reedas 4:7ebc3d28bcb2 79 */
reedas 4:7ebc3d28bcb2 80 /* !!! ALWAYS ADD MODULE BASES AT THE END. DO NOT INSERT NEW MODULES IN BETWEEN EXISTING MODULES !!!
reedas 4:7ebc3d28bcb2 81 * The expectation is that all middleware modules shall define their base out of this file so
reedas 4:7ebc3d28bcb2 82 * that the error code space can be reserved and allotted efficiently
reedas 4:7ebc3d28bcb2 83 */
reedas 4:7ebc3d28bcb2 84
reedas 4:7ebc3d28bcb2 85 /** MDNS module base */
reedas 4:7ebc3d28bcb2 86 #define CY_RSLT_MODULE_MDNS_BASE CY_RSLT_MODULE_MIDDLEWARE_BASE
reedas 4:7ebc3d28bcb2 87 /** AWS IoT module base */
reedas 4:7ebc3d28bcb2 88 #define CY_RSLT_MODULE_AWS_BASE CY_RSLT_MODULE_MIDDLEWARE_BASE + 1
reedas 4:7ebc3d28bcb2 89 /** JSON parser module base */
reedas 4:7ebc3d28bcb2 90 #define CY_RSLT_MODULE_JSON_BASE CY_RSLT_MODULE_MIDDLEWARE_BASE + 2
reedas 4:7ebc3d28bcb2 91 /** Linked list module base */
reedas 4:7ebc3d28bcb2 92 #define CY_RSLT_MODULE_LINKED_LIST_BASE CY_RSLT_MODULE_MIDDLEWARE_BASE + 3
reedas 4:7ebc3d28bcb2 93 /** command console module base */
reedas 4:7ebc3d28bcb2 94 #define CY_RSLT_MODULE_COMMAND_CONSOLE_BASE CY_RSLT_MODULE_MIDDLEWARE_BASE + 4
reedas 4:7ebc3d28bcb2 95 /** HTTP server module base */
reedas 4:7ebc3d28bcb2 96 #define CY_RSLT_MODULE_HTTP_SERVER CY_RSLT_MODULE_MIDDLEWARE_BASE + 5
reedas 4:7ebc3d28bcb2 97 /** Enterprise Security base */
reedas 4:7ebc3d28bcb2 98 #define CY_RSLT_MODULE_ENTERPRISE_SECURITY_BASE CY_RSLT_MODULE_MIDDLEWARE_BASE + 6
reedas 4:7ebc3d28bcb2 99 /** TCP/IP module base */
reedas 4:7ebc3d28bcb2 100 #define CY_RSLT_MODULE_TCPIP_BASE CY_RSLT_MODULE_MIDDLEWARE_BASE + 7
reedas 4:7ebc3d28bcb2 101 /** Generic middleware module base */
reedas 4:7ebc3d28bcb2 102 #define CY_RSLT_MODULE_MW_BASE CY_RSLT_MODULE_MIDDLEWARE_BASE + 8
reedas 4:7ebc3d28bcb2 103 /** TLS module base */
reedas 4:7ebc3d28bcb2 104 #define CY_RSLT_MODULE_TLS_BASE CY_RSLT_MODULE_MIDDLEWARE_BASE + 9
reedas 4:7ebc3d28bcb2 105 /** Secure Sockets module base */
reedas 4:7ebc3d28bcb2 106 #define CY_RSLT_MODULE_SECURE_SOCKETS_BASE CY_RSLT_MODULE_MIDDLEWARE_BASE + 10
reedas 4:7ebc3d28bcb2 107 /** WiFi Connection Manager (WCM) module base */
reedas 4:7ebc3d28bcb2 108 #define CY_RSLT_MODULE_WCM_BASE CY_RSLT_MODULE_MIDDLEWARE_BASE + 11
reedas 4:7ebc3d28bcb2 109 /** lwIP WHD port module base */
reedas 4:7ebc3d28bcb2 110 #define CY_RSLT_MODULE_LWIP_WHD_PORT_BASE CY_RSLT_MODULE_MIDDLEWARE_BASE + 12
reedas 4:7ebc3d28bcb2 111 /** Over The Air Update Module base (OTA) */
reedas 4:7ebc3d28bcb2 112 #define CY_RSLT_MODULE_OTA_UPDATE_BASE CY_RSLT_MODULE_MIDDLEWARE_BASE + 13
reedas 4:7ebc3d28bcb2 113 /** HTTP Client module base */
reedas 4:7ebc3d28bcb2 114 #define CY_RSLT_MODULE_HTTP_CLIENT CY_RSLT_MODULE_MIDDLEWARE_BASE + 14
reedas 4:7ebc3d28bcb2 115
reedas 4:7ebc3d28bcb2 116 /**
reedas 4:7ebc3d28bcb2 117 * @}
reedas 4:7ebc3d28bcb2 118 */
reedas 4:7ebc3d28bcb2 119
reedas 4:7ebc3d28bcb2 120 /**
reedas 4:7ebc3d28bcb2 121 * @defgroup generic_mw_defines generic middleware results/error codes
reedas 4:7ebc3d28bcb2 122 * @ingroup group_utils_enums
reedas 4:7ebc3d28bcb2 123 * @{
reedas 4:7ebc3d28bcb2 124 * List of all the generic result/error codes defined by the connectivity-utilities library.
reedas 4:7ebc3d28bcb2 125 */
reedas 4:7ebc3d28bcb2 126 /** Generic middleware error code start */
reedas 4:7ebc3d28bcb2 127 #define CY_RSLT_MODULE_MW_ERR_CODE_START (0)
reedas 4:7ebc3d28bcb2 128 /** Generic middleware base error code */
reedas 4:7ebc3d28bcb2 129 #define CY_RSLT_MW_ERR_BASE CY_RSLT_CREATE(CY_RSLT_TYPE_ERROR, CY_RSLT_MODULE_MW_BASE, CY_RSLT_MODULE_MW_ERR_CODE_START)
reedas 4:7ebc3d28bcb2 130 /** Generic middleware error */
reedas 4:7ebc3d28bcb2 131 #define CY_RSLT_MW_ERROR ( CY_RSLT_MW_ERR_BASE + 1 )
reedas 4:7ebc3d28bcb2 132 /** Generic middleware timeout */
reedas 4:7ebc3d28bcb2 133 #define CY_RSLT_MW_TIMEOUT ( CY_RSLT_MW_ERR_BASE + 2 )
reedas 4:7ebc3d28bcb2 134 /** Generic middleware bad argument */
reedas 4:7ebc3d28bcb2 135 #define CY_RSLT_MW_BADARG ( CY_RSLT_MW_ERR_BASE + 3 )
reedas 4:7ebc3d28bcb2 136 /** Generic middleware out of heap memory */
reedas 4:7ebc3d28bcb2 137 #define CY_RSLT_MW_OUT_OF_HEAP_SPACE ( CY_RSLT_MW_ERR_BASE + 4 )
reedas 4:7ebc3d28bcb2 138 /** Generic middleware pending operation */
reedas 4:7ebc3d28bcb2 139 #define CY_RSLT_MW_PENDNG ( CY_RSLT_MW_ERR_BASE + 5 )
reedas 4:7ebc3d28bcb2 140 /** Generic middleware unsupported method */
reedas 4:7ebc3d28bcb2 141 #define CY_RSLT_MW_UNSUPPORTED ( CY_RSLT_MW_ERR_BASE + 6 )
reedas 4:7ebc3d28bcb2 142 /** Generic middleware buffer unavailable */
reedas 4:7ebc3d28bcb2 143 #define CY_RSLT_MW_BUFFER_UNAVAIL_TEMPORARILY ( CY_RSLT_MW_ERR_BASE + 7 )
reedas 4:7ebc3d28bcb2 144
reedas 4:7ebc3d28bcb2 145 /**
reedas 4:7ebc3d28bcb2 146 * @}
reedas 4:7ebc3d28bcb2 147 */
reedas 4:7ebc3d28bcb2 148
reedas 4:7ebc3d28bcb2 149 /**
reedas 4:7ebc3d28bcb2 150 * @defgroup tcpip_mw_defines TCP/IP socket results/error codes
reedas 4:7ebc3d28bcb2 151 * @ingroup group_utils_enums
reedas 4:7ebc3d28bcb2 152 * @{
reedas 4:7ebc3d28bcb2 153 * List of all the socket result/error codes defined by the connectivity-utilities library.
reedas 4:7ebc3d28bcb2 154 */
reedas 4:7ebc3d28bcb2 155 /** TCP/IP error code start */
reedas 4:7ebc3d28bcb2 156 #define CY_RSLT_MODULE_TCPIP_ERR_CODE_START (0)
reedas 4:7ebc3d28bcb2 157 /** TCPIP/IP base error code */
reedas 4:7ebc3d28bcb2 158 #define CY_RSLT_TCPIP_ERR_BASE CY_RSLT_CREATE(CY_RSLT_TYPE_ERROR, CY_RSLT_MODULE_TCPIP_BASE, CY_RSLT_MODULE_TCPIP_ERR_CODE_START)
reedas 4:7ebc3d28bcb2 159 /** TCP/IP generic error */
reedas 4:7ebc3d28bcb2 160 #define CY_RSLT_TCPIP_ERROR ( CY_RSLT_TCPIP_ERR_BASE + 1 )
reedas 4:7ebc3d28bcb2 161 /** TCP/IP timeout */
reedas 4:7ebc3d28bcb2 162 #define CY_RSLT_TCPIP_TIMEOUT ( CY_RSLT_TCPIP_ERR_BASE + 2 )
reedas 4:7ebc3d28bcb2 163 /** TCP/IP out of memory */
reedas 4:7ebc3d28bcb2 164 #define CY_RSLT_TCPIP_ERROR_NO_MEMORY ( CY_RSLT_TCPIP_ERR_BASE + 3 )
reedas 4:7ebc3d28bcb2 165 /** TCP/IP error opening socket */
reedas 4:7ebc3d28bcb2 166 #define CY_RSLT_TCPIP_ERROR_SOCKET_OPEN ( CY_RSLT_TCPIP_ERR_BASE + 4 )
reedas 4:7ebc3d28bcb2 167 /** TCP/IP error binding socket */
reedas 4:7ebc3d28bcb2 168 #define CY_RSLT_TCPIP_ERROR_SOCKET_BIND ( CY_RSLT_TCPIP_ERR_BASE + 5 )
reedas 4:7ebc3d28bcb2 169 /** TCP/IP error listening to socket */
reedas 4:7ebc3d28bcb2 170 #define CY_RSLT_TCPIP_ERROR_SOCKET_LISTEN ( CY_RSLT_TCPIP_ERR_BASE + 6 )
reedas 4:7ebc3d28bcb2 171 /** TCP/IP error accepting socket */
reedas 4:7ebc3d28bcb2 172 #define CY_RSLT_TCPIP_ERROR_SOCKET_ACCEPT ( CY_RSLT_TCPIP_ERR_BASE + 7 )
reedas 4:7ebc3d28bcb2 173 /** TCP/IP error with TLS operation */
reedas 4:7ebc3d28bcb2 174 #define CY_RSLT_TCPIP_ERROR_TLS_OPERATION ( CY_RSLT_TCPIP_ERR_BASE + 8 )
reedas 4:7ebc3d28bcb2 175 /** TCP/IP max sockets bound */
reedas 4:7ebc3d28bcb2 176 #define CY_RSLT_TCPIP_ERROR_NO_MORE_SOCKET ( CY_RSLT_TCPIP_ERR_BASE + 9 )
reedas 4:7ebc3d28bcb2 177 /** TCP/IP error sending data */
reedas 4:7ebc3d28bcb2 178 #define CY_RSLT_TCPIP_ERROR_SEND ( CY_RSLT_TCPIP_ERR_BASE + 10)
reedas 4:7ebc3d28bcb2 179 /** TCP/IP error receiving data */
reedas 4:7ebc3d28bcb2 180 #define CY_RSLT_TCPIP_ERROR_RECEIVE ( CY_RSLT_TCPIP_ERR_BASE + 11)
reedas 4:7ebc3d28bcb2 181 /** TCP/IP error in setting socket options */
reedas 4:7ebc3d28bcb2 182 #define CY_RSLT_TCPIP_ERROR_SOCKET_OPTIONS ( CY_RSLT_TCPIP_ERR_BASE + 12 )
reedas 4:7ebc3d28bcb2 183 /** TCP/IP error bad argument */
reedas 4:7ebc3d28bcb2 184 #define CY_RSLT_TCPIP_ERROR_BAD_ARG ( CY_RSLT_TCPIP_ERR_BASE + 13 )
reedas 4:7ebc3d28bcb2 185 /** TCP/IP error socket closed */
reedas 4:7ebc3d28bcb2 186 #define CY_RSLT_TCPIP_ERROR_SOCKET_CLOSED ( CY_RSLT_TCPIP_ERR_BASE + 14 )
reedas 4:7ebc3d28bcb2 187
reedas 4:7ebc3d28bcb2 188 /**
reedas 4:7ebc3d28bcb2 189 * @}
reedas 4:7ebc3d28bcb2 190 */
reedas 4:7ebc3d28bcb2 191
reedas 4:7ebc3d28bcb2 192 /**
reedas 4:7ebc3d28bcb2 193 * @defgroup tls_mw_defines TLS results/error codes
reedas 4:7ebc3d28bcb2 194 * @ingroup group_utils_enums
reedas 4:7ebc3d28bcb2 195 * @{
reedas 4:7ebc3d28bcb2 196 * List of all the TLS result/error codes defined by the connectivity-utilities library.
reedas 4:7ebc3d28bcb2 197 */
reedas 4:7ebc3d28bcb2 198 /** TLS error code start */
reedas 4:7ebc3d28bcb2 199 #define CY_RSLT_MODULE_TLS_ERR_CODE_START (0)
reedas 4:7ebc3d28bcb2 200 /** TLS base error code */
reedas 4:7ebc3d28bcb2 201 #define CY_RSLT_TLS_ERR_BASE CY_RSLT_CREATE(CY_RSLT_TYPE_ERROR, CY_RSLT_MODULE_TLS_BASE, CY_RSLT_MODULE_TLS_ERR_CODE_START)
reedas 4:7ebc3d28bcb2 202 /** TLS generic error */
reedas 4:7ebc3d28bcb2 203 #define CY_RSLT_MODULE_TLS_ERROR ( CY_RSLT_TLS_ERR_BASE + 1 )
reedas 4:7ebc3d28bcb2 204 /** TLS timeout error */
reedas 4:7ebc3d28bcb2 205 #define CY_RSLT_MODULE_TLS_TIMEOUT ( CY_RSLT_TLS_ERR_BASE + 2 )
reedas 4:7ebc3d28bcb2 206 /** TLS bad argument */
reedas 4:7ebc3d28bcb2 207 #define CY_RSLT_MODULE_TLS_BADARG ( CY_RSLT_TLS_ERR_BASE + 3 )
reedas 4:7ebc3d28bcb2 208 /** TLS out of memory */
reedas 4:7ebc3d28bcb2 209 #define CY_RSLT_MODULE_TLS_OUT_OF_HEAP_SPACE ( CY_RSLT_TLS_ERR_BASE + 4 )
reedas 4:7ebc3d28bcb2 210 /** TLS bad input */
reedas 4:7ebc3d28bcb2 211 #define CY_RSLT_MODULE_TLS_BAD_INPUT_DATA ( CY_RSLT_TLS_ERR_BASE + 5 )
reedas 4:7ebc3d28bcb2 212 /** TLS error parsing private key */
reedas 4:7ebc3d28bcb2 213 #define CY_RSLT_MODULE_TLS_PARSE_KEY ( CY_RSLT_TLS_ERR_BASE + 6 )
reedas 4:7ebc3d28bcb2 214 /** TLS error parsing certificate */
reedas 4:7ebc3d28bcb2 215 #define CY_RSLT_MODULE_TLS_PARSE_CERTIFICATE ( CY_RSLT_TLS_ERR_BASE + 7 )
reedas 4:7ebc3d28bcb2 216 /** TLS unsupported method */
reedas 4:7ebc3d28bcb2 217 #define CY_RSLT_MODULE_TLS_UNSUPPORTED ( CY_RSLT_TLS_ERR_BASE + 8 )
reedas 4:7ebc3d28bcb2 218 /** TLS handshake failure */
reedas 4:7ebc3d28bcb2 219 #define CY_RSLT_MODULE_TLS_HANDSHAKE_FAILURE ( CY_RSLT_TLS_ERR_BASE + 9 )
reedas 4:7ebc3d28bcb2 220 /** TLS socket connection closed by peer */
reedas 4:7ebc3d28bcb2 221 #define CY_RSLT_MODULE_TLS_CONNECTION_CLOSED ( CY_RSLT_TLS_ERR_BASE + 10 )
reedas 4:7ebc3d28bcb2 222 /** TLS socket not connected */
reedas 4:7ebc3d28bcb2 223 #define CY_RSLT_MODULE_TLS_SOCKET_NOT_CONNECTED ( CY_RSLT_TLS_ERR_BASE + 11 )
reedas 4:7ebc3d28bcb2 224 /** PKCS11 generic error */
reedas 4:7ebc3d28bcb2 225 #define CY_RSLT_MODULE_TLS_PKCS_ERROR ( CY_RSLT_TLS_ERR_BASE + 12 )
reedas 4:7ebc3d28bcb2 226
reedas 4:7ebc3d28bcb2 227 /**
reedas 4:7ebc3d28bcb2 228 * @}
reedas 4:7ebc3d28bcb2 229 */
reedas 4:7ebc3d28bcb2 230
reedas 4:7ebc3d28bcb2 231 #ifdef __cplusplus
reedas 4:7ebc3d28bcb2 232 } /*extern "C" */
reedas 4:7ebc3d28bcb2 233 #endif
reedas 4:7ebc3d28bcb2 234