leo hendrickson / Mbed OS example-Ethernet-mbed-Cloud-connect
Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers arm_uc_config.h Source File

arm_uc_config.h

00001 // ----------------------------------------------------------------------------
00002 // Copyright 2016-2017 ARM Ltd.
00003 //
00004 // SPDX-License-Identifier: Apache-2.0
00005 //
00006 // Licensed under the Apache License, Version 2.0 (the "License");
00007 // you may not use this file except in compliance with the License.
00008 // You may obtain a copy of the License at
00009 //
00010 //     http://www.apache.org/licenses/LICENSE-2.0
00011 //
00012 // Unless required by applicable law or agreed to in writing, software
00013 // distributed under the License is distributed on an "AS IS" BASIS,
00014 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
00015 // See the License for the specific language governing permissions and
00016 // limitations under the License.
00017 // ----------------------------------------------------------------------------
00018 
00019 #ifndef ARM_UPDATE_CONFIG_H
00020 #define ARM_UPDATE_CONFIG_H
00021 
00022 #ifdef MBED_CLOUD_CLIENT_USER_CONFIG_FILE
00023 #include MBED_CLOUD_CLIENT_USER_CONFIG_FILE
00024 #endif
00025 
00026 #ifndef MAX_SOURCES
00027 #define MAX_SOURCES 10
00028 #endif
00029 
00030 #ifndef ARM_UC_SOCKET_MAX_RETRY
00031 #define ARM_UC_SOCKET_MAX_RETRY 3
00032 #endif
00033 
00034 /* PROFILE FLAGS
00035 ARM_UC_PROFILE_MBED_CLIENT_LITE
00036 ARM_UC_PROFILE_MBED_CLOUD_CLIENT
00037 */
00038 
00039 /* FEATURE FLAGS
00040 ARM_UC_FEATURE_PAL_BLOCKDEVICE
00041 ARM_UC_FEATURE_PAL_FILESYSTEM
00042 ARM_UC_FEATURE_PAL_FLASHIAP
00043 ARM_UC_FEATURE_PAL_LINUX
00044 ARM_UC_FEATURE_PAL_RTL8195AM
00045 ARM_UC_FEATURE_FW_SOURCE_HTTP
00046 ARM_UC_FEATURE_FW_SOURCE_COAP
00047 ARM_UC_FEATURE_FW_SOURCE_LOCAL_FILE
00048 ARM_UC_FEATURE_RESUME_ENGINE
00049 ARM_UC_FEATURE_MANIFEST_PUBKEY
00050 ARM_UC_FEATURE_MANIFEST_PSK
00051 ARM_UC_FEATURE_IDENTITY_NVSTORE
00052 ARM_UC_FEATURE_IDENTITY_KCM
00053 ARM_UC_FEATURE_IDENTITY_RAW_CONFIG
00054 ARM_UC_FEATURE_CRYPTO_PAL
00055 ARM_UC_FEATURE_CRYPTO_MBEDTLS
00056 ARM_UC_FEATURE_CERT_STORE_KCM
00057 ARM_UC_FEATURE_CERT_STORE_RAW
00058 ARM_UC_FEATURE_PSK_STORE_NVSTORE
00059 ARM_UC_FEATURE_PSK_STORE_RAW
00060 */
00061 
00062 #define MBED_CLOUD_CLIENT_UPDATE_DOWNLOAD_PROTOCOL_COAP 1
00063 #define MBED_CLOUD_CLIENT_UPDATE_DOWNLOAD_PROTOCOL_HTTP 2
00064 
00065 /* Map MCC Fetcher-flag to internal flag */
00066 #if defined(MBED_CONF_MBED_CLOUD_CLIENT_UPDATE_DOWNLOAD_PROTOCOL)
00067 #if MBED_CONF_MBED_CLOUD_CLIENT_UPDATE_DOWNLOAD_PROTOCOL == MBED_CLOUD_CLIENT_UPDATE_DOWNLOAD_PROTOCOL_COAP
00068 #define ARM_UC_FEATURE_FW_SOURCE_COAP 1
00069 #define ARM_UC_FEATURE_FW_SOURCE_HTTP 0
00070 #elif MBED_CONF_MBED_CLOUD_CLIENT_UPDATE_DOWNLOAD_PROTOCOL == MBED_CLOUD_CLIENT_UPDATE_DOWNLOAD_PROTOCOL_HTTP
00071 #define ARM_UC_FEATURE_FW_SOURCE_COAP 0
00072 #define ARM_UC_FEATURE_FW_SOURCE_HTTP 1
00073 #else
00074 #error "Invalid value for MBED_CONF_MBED_CLOUD_CLIENT_UPDATE_DOWNLOAD_PROTOCOL. Must be either MBED_CLOUD_CLIENT_UPDATE_DOWNLOAD_PROTOCOL_HTTP or MBED_CLOUD_CLIENT_UPDATE_DOWNLOAD_PROTOCOL_COAP."
00075 #endif
00076 #endif
00077 
00078 #if defined(MBED_CONF_MBED_CLOUD_CLIENT_UPDATE_DOWNLOAD_PROTOCOL) && MBED_CONF_MBED_CLOUD_CLIENT_UPDATE_DOWNLOAD_PROTOCOL == MBED_CLOUD_CLIENT_UPDATE_DOWNLOAD_PROTOCOL_HTTP
00079 #define ARM_UC_FEATURE_FW_SOURCE_COAP 0
00080 #define ARM_UC_FEATURE_FW_SOURCE_HTTP 1
00081 #endif
00082 
00083 /* Map Legacy flags to new flags */
00084 #if defined(ARM_UC_USE_PAL_CRYPTO) && ARM_UC_USE_PAL_CRYPTO == 1
00085 #warning "ARM_UC_USE_PAL_CRYPTO DEPRECATED, See arm_uc_config.h for new flags."
00086 #define ARM_UC_FEATURE_CRYPTO_PAL 1
00087 #endif
00088 
00089 #if defined(ARM_UC_USE_KCM) && ARM_UC_USE_KCM == 1
00090 #warning "ARM_UC_USE_KCM DEPRECATED, See arm_uc_config.h for new flags."
00091 #define ARM_UC_FEATURE_IDENTITY_NVSTORE 0
00092 #define ARM_UC_FEATURE_IDENTITY_KCM 1
00093 #define ARM_UC_FEATURE_IDENTITY_RAW_CONFIG 0
00094 #define ARM_UC_FEATURE_PSK_STORE_NVSTORE 0
00095 #define ARM_UC_FEATURE_PSK_STORE_RAW 0
00096 #define ARM_UC_FEATURE_CERT_STORE_KCM 1
00097 #define ARM_UC_FEATURE_CERT_STORE_RAW 0
00098 #endif
00099 
00100 #if defined(ARM_UC_USE_CFSTORE) && ARM_UC_USE_CFSTORE != 0
00101 #error "CFSTORE SUPPORT DEPRECATED!"
00102 #endif
00103 
00104 #if defined (ARM_UC_USE_RAW_CONFIG) && ARM_UC_USE_RAW_CONFIG == 1
00105 #warning "ARM_UC_USE_RAW_CONFIG DEPRECATED, See arm_uc_config.h for new flags."
00106 #define ARM_UC_FEATURE_IDENTITY_NVSTORE 0
00107 #define ARM_UC_FEATURE_IDENTITY_KCM 0
00108 #define ARM_UC_FEATURE_IDENTITY_RAW_CONFIG 1
00109 #define ARM_UC_FEATURE_PSK_STORE_NVSTORE 0
00110 #define ARM_UC_FEATURE_PSK_STORE_RAW 1
00111 #define ARM_UC_FEATURE_CERT_STORE_KCM 0
00112 #define ARM_UC_FEATURE_CERT_STORE_RAW 1
00113 #endif
00114 
00115 #if defined (ARM_UC_USE_NVSTORE) && ARM_UC_USE_NVSTORE == 1
00116 #warning "ARM_UC_USE_NVSTORE DEPRECATED, See arm_uc_config.h for new flags."
00117 #define ARM_UC_FEATURE_IDENTITY_NVSTORE 1
00118 #define ARM_UC_FEATURE_IDENTITY_KCM 0
00119 #define ARM_UC_FEATURE_IDENTITY_RAW_CONFIG 0
00120 #define ARM_UC_FEATURE_PSK_STORE_NVSTORE 1
00121 #define ARM_UC_FEATURE_PSK_STORE_RAW 0
00122 #define ARM_UC_FEATURE_CERT_STORE_KCM 0
00123 #define ARM_UC_FEATURE_CERT_STORE_RAW 0
00124 #endif
00125 
00126 /* Profile feature modifiers */
00127 #if defined(ARM_UC_PROFILE_MBED_CLIENT_LITE) && (ARM_UC_PROFILE_MBED_CLIENT_LITE == 1)
00128 
00129 #ifndef ARM_UC_FEATURE_MANIFEST_PUBKEY
00130 #define ARM_UC_FEATURE_MANIFEST_PUBKEY 0
00131 #endif /* ARM_UC_FEATURE_MANIFEST_PUBKEY */
00132 
00133 #ifndef ARM_UC_FEATURE_MANIFEST_PSK
00134 #define ARM_UC_FEATURE_MANIFEST_PSK 1
00135 #endif /* ARM_UC_FEATURE_MANIFEST_PSK */
00136 
00137 #ifndef ARM_UC_FEATURE_FW_SOURCE_COAP
00138 #define ARM_UC_FEATURE_FW_SOURCE_COAP 1
00139 #endif /* ARM_UC_FEATURE_FW_SOURCE_COAP */
00140 
00141 #ifndef ARM_UC_FEATURE_RESUME_ENGINE
00142 #define ARM_UC_FEATURE_RESUME_ENGINE 0
00143 #endif /* ARM_UC_FEATURE_RESUME_ENGINE */
00144 
00145 #ifndef ARM_UC_FEATURE_FW_SOURCE_HTTP
00146 #define ARM_UC_FEATURE_FW_SOURCE_HTTP 0
00147 #endif /* ARM_UC_FEATURE_FW_SOURCE_HTTP */
00148 
00149 #ifndef ARM_UC_FEATURE_FW_SOURCE_LOCAL_FILE
00150 #define ARM_UC_FEATURE_FW_SOURCE_LOCAL_FILE 0
00151 #endif /* ARM_UC_FEATURE_FW_SOURCE_LOCAL_FILE */
00152 
00153 #ifndef ARM_UC_FEATURE_CRYPTO_MBEDTLS
00154 #define ARM_UC_FEATURE_CRYPTO_MBEDTLS 1
00155 #endif /* ARM_UC_FEATURE_CRYPTO_MBEDTLS */
00156 
00157 #ifndef ARM_UC_FEATURE_IDENTITY_NVSTORE
00158 #define ARM_UC_FEATURE_IDENTITY_NVSTORE 1
00159 #endif /* ARM_UC_FEATURE_IDENTITY_NVSTORE */
00160 
00161 #ifndef ARM_UC_FEATURE_CERT_STORE_KCM
00162 #define ARM_UC_FEATURE_CERT_STORE_KCM 0
00163 #endif /* ARM_UC_FEATURE_CERT_STORE_KCM */
00164 
00165 #ifndef ARM_UC_FEATURE_CERT_STORE_RAW
00166 #define ARM_UC_FEATURE_CERT_STORE_RAW 0
00167 #endif /* ARM_UC_FEATURE_CERT_STORE_RAW */
00168 
00169 #ifndef ARM_UC_FEATURE_PSK_STORE_NVSTORE
00170 #define ARM_UC_FEATURE_PSK_STORE_NVSTORE 1
00171 #endif /* ARM_UC_FEATURE_PSK_STORE_NVSTORE */
00172 
00173 #ifndef ARM_UC_FEATURE_PSK_STORE_RAW
00174 #define ARM_UC_FEATURE_PSK_STORE_RAW 0
00175 #endif /* ARM_UC_FEATURE_PSK_STORE_RAW */
00176 
00177 #elif defined(ARM_UC_PROFILE_MBED_CLOUD_CLIENT) && (ARM_UC_PROFILE_MBED_CLOUD_CLIENT == 1)
00178 
00179 #ifndef ARM_UC_FEATURE_MANIFEST_PUBKEY
00180 #define ARM_UC_FEATURE_MANIFEST_PUBKEY 1
00181 #endif /* ARM_UC_FEATURE_MANIFEST_PUBKEY */
00182 
00183 #ifndef ARM_UC_FEATURE_MANIFEST_PSK
00184 #define ARM_UC_FEATURE_MANIFEST_PSK 0
00185 #endif /* ARM_UC_FEATURE_MANIFEST_PSK */
00186 
00187 #ifndef ARM_UC_FEATURE_FW_SOURCE_COAP
00188 #define ARM_UC_FEATURE_FW_SOURCE_COAP 0
00189 #endif /* ARM_UC_FEATURE_FW_SOURCE_COAP */
00190 
00191 #ifndef ARM_UC_FEATURE_FW_SOURCE_HTTP
00192 #define ARM_UC_FEATURE_FW_SOURCE_HTTP 1
00193 #endif /* ARM_UC_FEATURE_FW_SOURCE_HTTP */
00194 
00195 #ifndef ARM_UC_FEATURE_FW_SOURCE_LOCAL_FILE
00196 #define ARM_UC_FEATURE_FW_SOURCE_LOCAL_FILE 0
00197 #endif /* ARM_UC_FEATURE_FW_SOURCE_LOCAL_FILE */
00198 
00199 #ifndef ARM_UC_FEATURE_RESUME_ENGINE
00200 #define ARM_UC_FEATURE_RESUME_ENGINE 1
00201 #endif /* ARM_UC_FEATURE_RESUME_ENGINE */
00202 
00203 #ifndef ARM_UC_FEATURE_IDENTITY_KCM
00204 #define ARM_UC_FEATURE_IDENTITY_KCM 1
00205 #endif /* ARM_UC_FEATURE_IDENTITY_RAW_CONFIG */
00206 
00207 #ifndef ARM_UC_FEATURE_CRYPTO_PAL
00208 #define ARM_UC_FEATURE_CRYPTO_PAL 1
00209 #endif /* ARM_UC_FEATURE_CRYPTO_PAL */
00210 
00211 #ifndef ARM_UC_FEATURE_CERT_STORE_KCM
00212 #define ARM_UC_FEATURE_CERT_STORE_KCM 1
00213 #endif /* ARM_UC_FEATURE_CERT_STORE_KCM */
00214 
00215 #ifndef ARM_UC_FEATURE_CERT_STORE_RAW
00216 #define ARM_UC_FEATURE_CERT_STORE_RAW 0
00217 #endif /* ARM_UC_FEATURE_CERT_STORE_RAW */
00218 
00219 #ifndef ARM_UC_FEATURE_PSK_STORE_NVSTORE
00220 #define ARM_UC_FEATURE_PSK_STORE_NVSTORE 0
00221 #endif /* ARM_UC_FEATURE_PSK_STORE_NVSTORE */
00222 
00223 #ifndef ARM_UC_FEATURE_PSK_STORE_RAW
00224 #define ARM_UC_FEATURE_PSK_STORE_RAW 0
00225 #endif /* ARM_UC_FEATURE_PSK_STORE_RAW */
00226 
00227 #else
00228 
00229 #error "Please define macro ARM_UC_PROFILE_MBED_CLIENT_LITE=1 or ARM_UC_PROFILE_MBED_CLOUD_CLIENT=1."
00230 
00231 #endif /* ARM_UC_PROFILE_MBED_CLIENT_LITE */
00232 
00233 /* Always have only one PAAL implementation */
00234 #if defined(UPDATE_CLIENT_STORAGE_FLASHIAP_BLOCKDEVICE)
00235 
00236 #define ARM_UC_FEATURE_PAL_FLASHIAP 1
00237 #define ARM_UC_FEATURE_PAL_BLOCKDEVICE 1
00238 #define ARM_UC_FEATURE_PAL_FILESYSTEM 0
00239 #define ARM_UC_FEATURE_PAL_LINUX 0
00240 #define ARM_UC_FEATURE_PAL_RTL8195AM 0
00241 
00242 #elif defined(UPDATE_CLIENT_STORAGE_FLASHIAP)
00243 
00244 #define ARM_UC_FEATURE_PAL_FLASHIAP 1
00245 #define ARM_UC_FEATURE_PAL_BLOCKDEVICE 0
00246 #define ARM_UC_FEATURE_PAL_FILESYSTEM 0
00247 #define ARM_UC_FEATURE_PAL_LINUX 0
00248 #define ARM_UC_FEATURE_PAL_RTL8195AM 0
00249 
00250 #elif defined(UPDATE_CLIENT_STORAGE_FILESYSTEM)
00251 
00252 #define ARM_UC_FEATURE_PAL_FLASHIAP 1
00253 #define ARM_UC_FEATURE_PAL_BLOCKDEVICE 0
00254 #define ARM_UC_FEATURE_PAL_FILESYSTEM 1
00255 #define ARM_UC_FEATURE_PAL_LINUX 0
00256 #define ARM_UC_FEATURE_PAL_RTL8195AM 0
00257 
00258 #elif defined(UPDATE_CLIENT_STORAGE_LINUX_GENERIC)
00259 
00260 #define ARM_UC_FEATURE_PAL_FLASHIAP 0
00261 #define ARM_UC_FEATURE_PAL_BLOCKDEVICE 0
00262 #define ARM_UC_FEATURE_PAL_FILESYSTEM 0
00263 #define ARM_UC_FEATURE_PAL_LINUX 1
00264 #define ARM_UC_FEATURE_PAL_RTL8195AM 0
00265 
00266 #elif defined(UPDATE_CLIENT_STORAGE_REALTEK_RTL8195AM)
00267 
00268 #define ARM_UC_FEATURE_PAL_FLASHIAP 0
00269 #define ARM_UC_FEATURE_PAL_BLOCKDEVICE 0
00270 #define ARM_UC_FEATURE_PAL_FILESYSTEM 0
00271 #define ARM_UC_FEATURE_PAL_LINUX 0
00272 #define ARM_UC_FEATURE_PAL_RTL8195AM 1
00273 
00274 #else /* support legacy configuration method for storage */
00275 
00276 #if defined(ARM_UC_USE_PAL_BLOCKDEVICE) && (ARM_UC_USE_PAL_BLOCKDEVICE == 1)
00277 #define ARM_UC_FEATURE_PAL_BLOCKDEVICE 1
00278 #endif
00279 
00280 #if defined(TARGET_LIKE_MBED)
00281 #define ARM_UC_FEATURE_PAL_FLASHIAP 1
00282 #endif
00283 
00284 #if defined(ARM_UC_PROFILE_MBED_CLOUD_CLIENT) && (ARM_UC_PROFILE_MBED_CLOUD_CLIENT == 1)
00285 /* turn on all possible implementations */
00286 #define ARM_UC_FEATURE_PAL_FILESYSTEM 1
00287 #define ARM_UC_FEATURE_PAL_LINUX 1
00288 #define ARM_UC_FEATURE_PAL_RTL8195AM 1
00289 
00290 #elif defined(ARM_UC_PROFILE_MBED_CLIENT_LITE) && (ARM_UC_PROFILE_MBED_CLIENT_LITE == 1)
00291 /* turn on only pal flashiap */
00292 #define ARM_UC_FEATURE_PAL_FILESYSTEM 0
00293 #define ARM_UC_FEATURE_PAL_LINUX 0
00294 #define ARM_UC_FEATURE_PAL_RTL8195AM 0
00295 
00296 #endif /* ARM_UC_PROFILE_MBED_CLOUD_CLIENT */
00297 
00298 #endif
00299 
00300 /* Always have only one IDENTITY implementation */
00301 #if defined(ARM_UC_FEATURE_IDENTITY_NVSTORE) && (ARM_UC_FEATURE_IDENTITY_NVSTORE == 1)
00302 #define ARM_UC_FEATURE_IDENTITY_KCM 0
00303 #define ARM_UC_FEATURE_IDENTITY_RAW_CONFIG 0
00304 #elif defined(ARM_UC_FEATURE_IDENTITY_KCM) && (ARM_UC_FEATURE_IDENTITY_KCM == 1)
00305 #define ARM_UC_FEATURE_IDENTITY_NVSTORE 0
00306 #define ARM_UC_FEATURE_IDENTITY_RAW_CONFIG 0
00307 #elif defined(ARM_UC_FEATURE_IDENTITY_RAW_CONFIG) && (ARM_UC_FEATURE_IDENTITY_RAW_CONFIG == 1)
00308 #define ARM_UC_FEATURE_IDENTITY_NVSTORE 0
00309 #define ARM_UC_FEATURE_IDENTITY_KCM 0
00310 #endif
00311 
00312 /* Always have only one CRYPTO implementation */
00313 #if defined(ARM_UC_FEATURE_CRYPTO_PAL) && (ARM_UC_FEATURE_CRYPTO_PAL == 1)
00314 #define ARM_UC_FEATURE_CRYPTO_MBEDTLS 0
00315 #elif defined(ARM_UC_FEATURE_CRYPTO_MBEDTLS) && (ARM_UC_FEATURE_CRYPTO_MBEDTLS == 1)
00316 #define ARM_UC_FEATURE_CRYPTO_PAL 0
00317 #endif
00318 
00319 /* Total memory allocated for download buffers.
00320    For HTTP sources, this number cannot be below 1 KiB.
00321 */
00322 #ifdef MBED_CLOUD_CLIENT_UPDATE_BUFFER
00323 #if MBED_CLOUD_CLIENT_UPDATE_BUFFER < 1024
00324 #error MBED_CLOUD_CLIENT_UPDATE_BUFFER must be 1024 bytes or more
00325 #else
00326 #define ARM_UC_BUFFER_SIZE MBED_CLOUD_CLIENT_UPDATE_BUFFER
00327 #endif
00328 #endif
00329 
00330 #ifndef ARM_UC_BUFFER_SIZE
00331 #define ARM_UC_BUFFER_SIZE 1024
00332 #endif
00333 
00334 #define MBED_CLOUD_CLIENT_UPDATE_CERTIFICATE_PREFIX "mbed.UpdateAuthCert."
00335 #define MBED_CLOUD_CLIENT_UPDATE_CERTIFICATE_DEFAULT "mbed.UpdateAuthCert"
00336 #define MBED_CLOUD_SHA256_BYTES (256/8)
00337 #define MBED_CLOUD_BASE64_SIZE(X) (((X + 2)/3)*4)
00338 #define MBED_CLOUD_CLIENT_UPDATE_CERTIFICATE_NAME_SIZE (MBED_CLOUD_BASE64_SIZE(MBED_CLOUD_SHA256_BYTES) + sizeof(MBED_CLOUD_CLIENT_UPDATE_CERTIFICATE_PREFIX))
00339 
00340 
00341 // NOTE: The charset must be sorted except for the trailing character which is used as a padding character.
00342 #define MBED_CLOUD_UPDATE_BASE64_CHARSET "0123456789@ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz-"
00343 
00344 #ifndef ARM_UC_SCHEDULER_STORAGE_POOL_SIZE
00345 #define ARM_UC_SCHEDULER_STORAGE_POOL_SIZE 32
00346 #endif
00347 
00348 #if defined(ARM_UC_FEATURE_ROOTLESS_STAGE_1) && (ARM_UC_FEATURE_ROOTLESS_STAGE_1 == 1) && !defined(TARGET_IS_PC_LINUX)
00349 #error The rootless update feature can be enabled only for Linux builds.
00350 #endif
00351 
00352 #endif // ARM_UPDATE_CONFIG_H