From 27f7d12db5d1fcc52bf831957560c56bb384c97f Mon Sep 17 00:00:00 2001 From: gdisirio Date: Mon, 24 Nov 2014 13:10:30 +0000 Subject: [PATCH] Added license handler to RT. git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@7532 35acf78f-673a-0410-8e92-d51de3d6d3f4 --- os/rt/include/ch.h | 1 + os/rt/include/chlicense.h | 243 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 244 insertions(+) create mode 100644 os/rt/include/chlicense.h diff --git a/os/rt/include/ch.h b/os/rt/include/ch.h index c88d39578..8e7a6c52a 100644 --- a/os/rt/include/ch.h +++ b/os/rt/include/ch.h @@ -65,6 +65,7 @@ /* Core headers.*/ #include "chtypes.h" #include "chconf.h" +#include "chlicense.h" #include "chsystypes.h" #include "chcore.h" #include "chdebug.h" diff --git a/os/rt/include/chlicense.h b/os/rt/include/chlicense.h new file mode 100644 index 000000000..b04e1231b --- /dev/null +++ b/os/rt/include/chlicense.h @@ -0,0 +1,243 @@ +/* + ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010, + 2011,2012,2013,2014 Giovanni Di Sirio. + + This file is part of ChibiOS/RT. + + ChibiOS/RT is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + ChibiOS/RT is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + +/** + * @file chlicense.h + * @brief License Module macros and structures. + * + * @addtogroup license + * @{ + */ + +#ifndef _CHLICENSE_H_ +#define _CHLICENSE_H_ + +/*===========================================================================*/ +/* Module constants. */ +/*===========================================================================*/ + +/** + * @name Allowed Features Levels + * @{ + */ +#define CH_FEATURES_BASIC 0 +#define CH_FEATURES_INTERMEDIATE 1 +#define CH_FEATURES_FULL 2 +/** @} */ + +/** + * @name Deployment Options + */ +#define CH_DEPLOY_UNLIMITED -1 +#define CH_DEPLOY_NONE 0 +/** @} */ + +/** + * @name Licensing Options + * @{ + */ +#define CH_LICENSE_GPL 0 +#define CH_LICENSE_GPL_EXCEPTION 1 +#define CH_LICENSE_COMMERCIAL_FREE 2 +#define CH_LICENSE_COMMERCIAL_DEVELOPER 3 +#define CH_LICENSE_COMMERCIAL_FULL 4 +#define CH_LICENSE_PARTNER 5 +/** @} */ + +/*===========================================================================*/ +/* Module pre-compile time settings. */ +/*===========================================================================*/ + +/** + * @brief Current license. + * @note This setting is reserved to the copyright owner. + * @note Changing this setting invalidates the license. + * @note The license statement in the source headers is valid, applicable + * and binding regardless this setting. + */ +#define CH_LICENSE CH_LICENSE_GPL + +/*===========================================================================*/ +/* Derived constants and error checks. */ +/*===========================================================================*/ + +#if (CH_LICENSE == CH_LICENSE_GPL) || defined(__DOXYGEN__) +/** + * @brief License identification string. + * @details This string identifies the license in a machine-readable + * format. + */ +#define CH_LICENSE_TYPE_STRING "GNU General Public License 3 (GPL3)" + +/** + * @brief Customer identification string. + * @details This information is only available for registered commercial users. + */ +#define CH_LICENSE_ID_STRING "N/A" + +/** + * @brief Customer code. + * @details This information is only available for registered commercial users. + */ +#define CH_LICENSE_ID_CODE "N/A" + +/** + * @brief Code modifiability restrictions. + * @details This setting defines if the source code is user-modifiable or not. + */ +#define CH_LICENSE_MODIFIABLE_CODE TRUE + +/** + * @brief Code functionality restrictions. + * @details This setting defines which features are available under the + * current licensing scheme. The possible settings are: + * - @p CH_FEATURES_FULL if all features are available. + * - @p CH_FEATURES_INTERMEDIATE means that the following modules + * are restricted: + * - Tickless mode. + * - Condition Variables. + * - Time Measurement. + * - Statistics. + * . + * - @p CH_FEATURES_BASIC means that the following modules + * are restricted: + * - Tickless mode. + * - Condition Variables. + * - Time Measurement. + * - Statistics. + * - Recursive Mutexes. + * - Dynamic threading. + * . + * . + */ +#define CH_LICENSE_FEATURES CH_FEATURES_FULL + +/** + * @brief Code deploy restrictions. + * @detail This is the per-core deploy limit allowed under the current + * license scheme. + */ +#define CH_LICENSE_MAX_DEPLOY CH_DEPLOY_UNLIMITED + +#elif CH_LICENSE == CH_LICENSE_GPL_EXCEPTION +#define CH_LICENSE_TYPE_STRING "GNU General Public License 3 (GPL3) + Exception" +#define CH_LICENSE_ID_STRING "N/A" +#define CH_LICENSE_ID_CODE "N/A" +#define CH_LICENSE_MODIFIABLE_CODE FALSE +#define CH_LICENSE_FEATURES CH_FEATURES_BASIC +#define CH_LICENSE_MAX_DEPLOY CH_DEPLOY_UNLIMITED + +#elif CH_LICENSE == CH_LICENSE_COMMERCIAL_FREE +#include "chcustomer.h" +#define CH_LICENSE_TYPE_STRING "Zero Cost Registered License" +#define CH_LICENSE_ID_STRING CH_CUSTOMER_ID_STRING +#define CH_LICENSE_ID_CODE CH_CUSTOMER_ID_CODE +#define CH_LICENSE_MODIFIABLE_CODE FALSE +#define CH_LICENSE_FEATURES CH_FEATURES_INTERMEDIATE +#define CH_LICENSE_MAX_DEPLOY 200 + +#elif CH_LICENSE == CH_LICENSE_COMMERCIAL_DEVELOPER +#include "chcustomer.h" +#define CH_LICENSE_TYPE_STRING "Developer-Only Commercial License" +#define CH_LICENSE_ID_STRING CH_CUSTOMER_ID_STRING +#define CH_LICENSE_ID_CODE CH_CUSTOMER_ID_CODE +#define CH_LICENSE_MODIFIABLE_CODE TRUE +#define CH_LICENSE_FEATURES CH_FEATURES_FULL +#define CH_LICENSE_DEPLOY_LIMIT 200 + +#elif CH_LICENSE == CH_LICENSE_COMMERCIAL_FULL +#include "chcustomer.h" +#define CH_LICENSE_TYPE_STRING "Full Commercial License" +#define CH_LICENSE_ID_STRING CH_CUSTOMER_ID_STRING +#define CH_LICENSE_ID_CODE CH_CUSTOMER_ID_CODE +#define CH_LICENSE_MODIFIABLE_CODE TRUE +#define CH_LICENSE_FEATURES CH_FEATURES_FULL +#define CH_LICENSE_MAX_DEPLOY CH_DEPLOY_UNLIMITED + +#elif CH_LICENSE == CH_LICENSE_PARTNER +#include "chpartner.h" +#define CH_LICENSE_TYPE_STRING "Partners Special Commercial License" +#define CH_LICENSE_ID_STRING CH_PARTNER_ID_STRING +#define CH_LICENSE_ID_CODE CH_PARTNER_ID_CODE +#define CH_LICENSE_MODIFIABLE_CODE CH_PARTNER_MODIFIABLE_CODE +#define CH_LICENSE_FEATURES CH_PARTNER_FEATURES_FULL +#define CH_LICENSE_MAX_DEPLOY CH_PARTNER_MAX_DEPLOY + +#else +#error "invalid licensing option" +#endif + +/* Checks on the enabled features.*/ +#if CH_LICENSE_FEATURES == CH_FEATURES_FULL + /* No restrictions in full mode.*/ + +#elif (CH_LICENSE_FEATURES == CH_FEATURES_INTERMEDIATE) || \ + (CH_LICENSE_FEATURES == CH_FEATURES_BASIC) + /* Restrictions in basic and intermediate modes.*/ + #if CH_CFG_ST_TIMEDELTA > 0 + #error "CH_CFG_ST_TIMEDELTA > 0, tick-less functionality restricted" + #endif + + #if CH_CFG_USE_CONDVARS + #error "CH_CFG_USE_CONDVARS == TRUE, Condition Variables functionality restricted" + #endif + + #if CH_CFG_USE_TM + #error "CH_CFG_USE_TM == TRUE, Time Measurement functionality restricted" + #endif + + #if CH_DBG_STATISTICS + #error "CH_DBG_STATISTICS == TRUE, Condition Variables functionality restricted" + #endif + + #if CH_LICENSE_FEATURES == CH_FEATURES_BASIC + /* Restrictions in basic mode.*/ + #if CH_CFG_USE_MUTEXES_RECURSIVE + #error "CH_CFG_USE_MUTEXES_RECURSIVE == TRUE, Recursive Mutexes functionality restricted" + #endif + + #if CH_CFG_USE_DYNAMIC + #error "CH_CFG_USE_DYNAMIC == TRUE, Dynamic Threads functionality restricted" + #endif + #endif /* CH_LICENSE_FEATURES == CH_FEATURES_BASIC */ + +#else + #error "invalid feature settings" +#endif + +/*===========================================================================*/ +/* Module data structures and types. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Module macros. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* External declarations. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Module inline functions. */ +/*===========================================================================*/ + +#endif /* _CHLICENSE_H_ */ + +/** @} */