aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorgdisirio <gdisirio@35acf78f-673a-0410-8e92-d51de3d6d3f4>2014-11-24 13:10:30 +0000
committergdisirio <gdisirio@35acf78f-673a-0410-8e92-d51de3d6d3f4>2014-11-24 13:10:30 +0000
commit27f7d12db5d1fcc52bf831957560c56bb384c97f (patch)
tree7c76fff2354e66309b3ac499d3df254a3b004f43
parent5c6b12fbe233ddf145c54a32995d134ef1620c43 (diff)
downloadChibiOS-27f7d12db5d1fcc52bf831957560c56bb384c97f.tar.gz
ChibiOS-27f7d12db5d1fcc52bf831957560c56bb384c97f.tar.bz2
ChibiOS-27f7d12db5d1fcc52bf831957560c56bb384c97f.zip
Added license handler to RT.
git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@7532 35acf78f-673a-0410-8e92-d51de3d6d3f4
-rw-r--r--os/rt/include/ch.h1
-rw-r--r--os/rt/include/chlicense.h243
2 files changed, 244 insertions, 0 deletions
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 <http://www.gnu.org/licenses/>.
+*/
+
+/**
+ * @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_ */
+
+/** @} */