/* | |
* IoT Platform V1.1.0 | |
* Copyright (C) 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. | |
* | |
* Permission is hereby granted, free of charge, to any person obtaining a copy of | |
* this software and associated documentation files (the "Software"), to deal in | |
* the Software without restriction, including without limitation the rights to | |
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of | |
* the Software, and to permit persons to whom the Software is furnished to do so, | |
* subject to the following conditions: | |
* | |
* The above copyright notice and this permission notice shall be included in all | |
* copies or substantial portions of the Software. | |
* | |
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | |
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS | |
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR | |
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER | |
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN | |
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | |
*/ | |
/** | |
* @file iot_platform_types.h | |
* @brief Types of the platform layer. | |
*/ | |
#ifndef IOT_PLATFORM_TYPES_H_ | |
#define IOT_PLATFORM_TYPES_H_ | |
/* The config header is always included first. */ | |
#include "iot_config.h" | |
/* Linear containers (lists and queues) include for metrics types. */ | |
#include "iot_linear_containers.h" | |
/*------------------------- Thread management types -------------------------*/ | |
/** | |
* @brief A value representing the system default for new thread priority. | |
*/ | |
#ifndef IOT_THREAD_DEFAULT_PRIORITY | |
#define IOT_THREAD_DEFAULT_PRIORITY 0 | |
#endif | |
/** | |
* @brief A value representing the system default for new thread stack size. | |
*/ | |
#ifndef IOT_THREAD_DEFAULT_STACK_SIZE | |
#define IOT_THREAD_DEFAULT_STACK_SIZE 0 | |
#endif | |
/** | |
* @ingroup platform_datatypes_handles | |
* @brief The type used to represent mutexes, configured with the type | |
* `_IotSystemMutex_t`. | |
* | |
* For the provided ports, `_IotSystemMutex_t` will be automatically configured. | |
* For other ports, `_IotSystemMutex_t` should be set in `iot_config.h`. | |
* | |
* Mutexes should only be released by the threads that take them. | |
* | |
* <b>Example</b> <br> | |
* To change the type of #IotMutex_t to `long`: | |
* @code{c} | |
* typedef long _IotSystemMutex_t; | |
* #include "iot_threads.h" | |
* @endcode | |
*/ | |
typedef _IotSystemMutex_t IotMutex_t; | |
/** | |
* @ingroup platform_datatypes_handles | |
* @brief The type used to represent semaphores, configured with the type | |
* `_IotSystemSemaphore_t`. | |
* | |
* For the provided ports, `_IotSystemSemaphore_t` will be automatically configured. | |
* For other ports, `_IotSystemSemaphore_t` should be set in `iot_config.h`. | |
* | |
* Semaphores must be counting, and any thread may take (wait on) or release | |
* (post to) a semaphore. | |
* | |
* <b>Example</b> <br> | |
* To change the type of #IotSemaphore_t to `long`: | |
* @code{c} | |
* typedef long _IotSystemSemaphore_t; | |
* #include "iot_threads.h" | |
* @endcode | |
*/ | |
typedef _IotSystemSemaphore_t IotSemaphore_t; | |
/** | |
* @brief Thread routine function. | |
* | |
* @param[in] void * The argument passed to the @ref | |
* platform_threads_function_createdetachedthread. For application use. | |
*/ | |
typedef void ( * IotThreadRoutine_t )( void * ); | |
/*-------------------------- Clock and timer types --------------------------*/ | |
/** | |
* @ingroup platform_datatypes_handles | |
* @brief The type used to represent timers, configured with the type | |
* `_IotSystemTimer_t`. | |
* | |
* For the provided ports, `_IotSystemTimer_t` will be automatically configured. | |
* For other ports, `_IotSystemTimer_t` should be set in `iot_config.h`. | |
* | |
* <b>Example</b> <br> | |
* To change the type of #IotTimer_t to `long`: | |
* @code{c} | |
* typedef long _IotSystemTimer_t; | |
* #include "iot_clock.h" | |
* @endcode | |
*/ | |
typedef _IotSystemTimer_t IotTimer_t; | |
/*--------------------------- Network stack types ---------------------------*/ | |
/** | |
* @ingroup platform_datatypes_handles | |
* @brief The type used to represent network server info, configured with the | |
* type `_IotNetworkServerInfo_t`. | |
* | |
* For the provided ports, `_IotNetworkServerInfo_t` will be automatically configured. | |
* For other ports, `_IotNetworkServerInfo_t` should be set in `iot_config.h`. | |
* | |
* All of the provided ports configure this to #IotNetworkServerInfo, which provides | |
* the necessary information to connect to a TCP peer. For other network protocols, | |
* this type should be set to an alternate structure as needed by the other protocol. | |
*/ | |
typedef _IotNetworkServerInfo_t IotNetworkServerInfo_t; | |
/** | |
* @ingroup platform_datatypes_handles | |
* @brief The type used to represent network credentials, configured with the | |
* type `_IotNetworkCredentials_t`. | |
* | |
* For the provided ports, `_IotNetworkCredentials_t` will be automatically configured. | |
* For other ports, `_IotNetworkCredentials_t` should be set in `iot_config.h`. | |
* | |
* All of the provided ports configure this to #IotNetworkCredentials, which provides | |
* the necessary information to connect to a TLS server over TCP. For other network | |
* protocols, this type should be set to an alternate structure as needed by the other | |
* protocol. | |
*/ | |
typedef _IotNetworkCredentials_t IotNetworkCredentials_t; | |
/** | |
* @ingroup platform_datatypes_handles | |
* @brief The type used to represent network connections, configured with the | |
* type `_IotNetworkConnection_t`. | |
* | |
* For the provided ports, `_IotNetworkConnection_t` will be automatically configured. | |
* For other ports, `_IotNetworkConnection_t` should be set in `iot_config.h`. | |
*/ | |
typedef _IotNetworkConnection_t IotNetworkConnection_t; | |
/*------------------------------ Metrics types ------------------------------*/ | |
/** | |
* @brief The length of the buffer used to store IP addresses for metrics. | |
* | |
* This is the length of the longest IPv6 address plus space for the port number | |
* and NULL terminator. | |
*/ | |
#define IOT_METRICS_IP_ADDRESS_LENGTH 54 | |
/** | |
* @brief Represents a TCP connection to a remote IPv4 server. | |
* | |
* A list of these is provided by @ref platform_metrics_function_gettcpconnections. | |
*/ | |
typedef struct IotMetricsTcpConnection | |
{ | |
IotLink_t link; /**< @brief List link member. */ | |
void * pNetworkContext; /**< @brief Context that may be used by metrics or Defender. */ | |
size_t addressLength; /**< @brief The length of the address stored in #IotMetricsTcpConnection_t.pRemoteAddress. */ | |
/** | |
* @brief NULL-terminated IP address and port in text format. | |
* | |
* IPv4 addresses will be in the format `xxx.xxx.xxx.xxx:port`. | |
* IPv6 addresses will be in the format `[xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx]:port`. | |
*/ | |
char pRemoteAddress[ IOT_METRICS_IP_ADDRESS_LENGTH ]; | |
} IotMetricsTcpConnection_t; | |
#endif /* ifndef IOT_PLATFORM_TYPES_H_ */ |