From 177689946514416bf7d245569d5736f56b17e1f8 Mon Sep 17 00:00:00 2001 From: Giovanni Di Sirio Date: Mon, 10 Aug 2020 11:44:01 +0000 Subject: [PATCH] Improved licensing checks for RT. git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@13806 27425a3e-05d8-49a3-a47f-9c15f0e5edd8 --- os/license/chcustomer.h | 15 ++++++ os/license/chlicense.h | 101 ++++++++++++++++++++++++++++++++++++++++ os/license/chversion.h | 14 ++++-- os/rt/include/ch.h | 4 +- 4 files changed, 129 insertions(+), 5 deletions(-) diff --git a/os/license/chcustomer.h b/os/license/chcustomer.h index ae69e5b6e..01f381ac7 100644 --- a/os/license/chcustomer.h +++ b/os/license/chcustomer.h @@ -45,6 +45,21 @@ */ #define CH_CUSTOMER_ID_CODE "xxxx-yyyy" +/** + * @brief End-Of-Support date (yyyymm). + */ +#define CH_CUSTOMER_LICENSE_EOS 209912 + +/** + * @brief Licensed branch year. + */ +#define CH_CUSTOMER_LICENSE_VERSION_YEAR 99 + +/** + * @brief Licensed branch month. + */ +#define CH_CUSTOMER_LICENSE_VERSION_MONTH 12 + /** * @brief Current license. * @note This setting is reserved to the copyright owner. diff --git a/os/license/chlicense.h b/os/license/chlicense.h index 9a956de3d..8cc9f5031 100644 --- a/os/license/chlicense.h +++ b/os/license/chlicense.h @@ -64,6 +64,7 @@ #define CH_LICENSE_PARTNER 7 /** @} */ +#include "chversion.h" #include "chcustomer.h" #if CH_LICENSE == CH_LICENSE_PARTNER #include "chpartner.h" @@ -80,6 +81,106 @@ /* Derived constants and error checks. */ /*===========================================================================*/ +/* Checks on chversion.h.*/ +#if !defined(__CHIBIOS__) + #error "__CHIBIOS__ not defined in chversion.h" +#endif + +#if !defined(CH_VERSION_STABLE) + #error "CH_VERSION_STABLE not defined in chversion.h" +#endif + +#if !defined(CH_VERSION_YEAR) + #error "CH_VERSION_YEAR not defined in chversion.h" +#endif + +#if !defined(CH_VERSION_MONTH) + #error "CH_VERSION_MONTH not defined in chversion.h" +#endif + +#if !defined(CH_VERSION_PATCH) + #error "CH_VERSION_PATCH not defined in chversion.h" +#endif + +#if !defined(CH_VERSION_NICKNAME) + #error "CH_VERSION_NICKNAME not defined in chversion.h" +#endif + +#if !defined(CH_VERSION_DATE) + #error "CH_VERSION_DATE not defined in chversion.h" +#endif + +#if (CH_VERSION_STABLE < 0) || (CH_VERSION_STABLE > 1) + #error "invalid CH_VERSION_STABLE value in chversion.h" +#endif + +#if (CH_VERSION_YEAR < 12) || (CH_VERSION_YEAR > 99) + #error "invalid CH_VERSION_YEAR value in chversion.h" +#endif + +#if (CH_VERSION_MONTH < 1) || (CH_VERSION_MONTH > 12) + #error "invalid CH_VERSION_MONTH value in chversion.h" +#endif + +#if (CH_VERSION_DATE < 201201) || (CH_VERSION_DATE > 209912) + #error "invalid CH_VERSION_DATE value in chversion.h" +#endif + +/* Checks on chcustomer.h.*/ +#if !defined(CH_CUSTOMER_ID_STRING) +#error "CH_CUSTOMER_ID_STRING not defined in chcustomer.h" +#endif + +#if !defined(CH_CUSTOMER_ID_CODE) +#error "CH_CUSTOMER_ID_CODE not defined in chcustomer.h" +#endif + +#if !defined(CH_CUSTOMER_LICENSE_EOS) +#error "CH_CUSTOMER_LICENSE_EOS not defined in chcustomer.h" +#endif + +#if !defined(CH_CUSTOMER_LICENSE_VERSION_YEAR) +#error "CH_CUSTOMER_LICENSE_VERSION_YEAR not defined in chcustomer.h" +#endif + +#if !defined(CH_CUSTOMER_LICENSE_VERSION_MONTH) +#error "CH_CUSTOMER_LICENSE_VERSION_MONTH not defined in chcustomer.h" +#endif + +#if !defined(CH_LICENSE) +#error "CH_LICENSE not defined in chcustomer.h" +#endif + +#if (CH_CUSTOMER_LICENSE_EOS < 201201) || \ + (CH_CUSTOMER_LICENSE_EOS > 209912) +#error "invalid CH_CUSTOMER_LICENSE_EOS value in chcustomer.h" +#endif + +#if (CH_CUSTOMER_LICENSE_VERSION_YEAR < 12) || \ + (CH_CUSTOMER_LICENSE_VERSION_YEAR > 99) +#error "invalid CH_CUSTOMER_LICENSE_VERSION_YEAR value in chcustomer.h" +#endif + +#if (CH_CUSTOMER_LICENSE_VERSION_MONTH < 1) || \ + (CH_CUSTOMER_LICENSE_VERSION_MONTH > 12) +#error "invalid CH_CUSTOMER_LICENSE_VERSION_MONTH value in chcustomer.h" +#endif + +/* Checks on licensed versions.*/ +#if (CH_VERSION_YEAR > CH_CUSTOMER_LICENSE_VERSION_YEAR ) + #error "ChibiOS version unsupported by this license" +#elif (CH_VERSION_YEAR == CH_CUSTOMER_LICENSE_VERSION_YEAR) + #if (CH_VERSION_MONTH > CH_CUSTOMER_LICENSE_VERSION_MONTH) + #error "ChibiOS version unsupported by this license" + #endif +#endif + +/* Checks on end-of-support date.*/ +#if CH_VERSION_DATE > CH_CUSTOMER_LICENSE_EOS +#error "this ChibiOS version is beyond your End-Of-Support date, see chcustomer.h" +#endif + +/* Defaults for GPL license.*/ #if (CH_LICENSE == CH_LICENSE_GPL) || defined(__DOXYGEN__) /** * @brief License identification string. diff --git a/os/license/chversion.h b/os/license/chversion.h index 91c7d59b1..35cb6f957 100644 --- a/os/license/chversion.h +++ b/os/license/chversion.h @@ -37,7 +37,7 @@ /** * @brief ChibiOS product identification macro. */ -#define _CHIBIOS_ +#define __CHIBIOS__ /** * @brief Stable release flag. @@ -51,17 +51,17 @@ /** * @brief ChibiOS version string. */ -#define CH_VERSION "0.0.0" +#define CH_VERSION "2012.1.0" /** * @brief ChibiOS version release year. */ -#define CH_VERSION_YEAR 0 +#define CH_VERSION_YEAR 12 /** * @brief ChibiOS version release month. */ -#define CH_VERSION_MONTH 0 +#define CH_VERSION_MONTH 1 /** * @brief ChibiOS version patch number. @@ -82,6 +82,12 @@ /* Derived constants and error checks. */ /*===========================================================================*/ +/** + * @brief Current version date in numeric form (yyyymm). + */ +#define CH_VERSION_DATE \ + (((CH_VERSION_YEAR + 2000) * 100) + CH_CUSTOMER_LICENSE_VERSION_MONTH) + /*===========================================================================*/ /* Module data structures and types. */ /*===========================================================================*/ diff --git a/os/rt/include/ch.h b/os/rt/include/ch.h index 840428971..40b2c89f3 100644 --- a/os/rt/include/ch.h +++ b/os/rt/include/ch.h @@ -86,10 +86,12 @@ #endif /** @} */ +/* License.*/ +#include "chlicense.h" + /* Configuration headers, checks and licensing restrictions.*/ #include "chconf.h" #include "chchecks.h" -#include "chlicense.h" #include "chrestrictions.h" /* Base kernel headers.*/