Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/Flipper-Zero/STM32CubeWB.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'Middlewares/ST/STM32_WPAN/ble/mesh/Src/mesh_cfg.c')
-rw-r--r--Middlewares/ST/STM32_WPAN/ble/mesh/Src/mesh_cfg.c325
1 files changed, 305 insertions, 20 deletions
diff --git a/Middlewares/ST/STM32_WPAN/ble/mesh/Src/mesh_cfg.c b/Middlewares/ST/STM32_WPAN/ble/mesh/Src/mesh_cfg.c
index ba5294447..45b0aa5c2 100644
--- a/Middlewares/ST/STM32_WPAN/ble/mesh/Src/mesh_cfg.c
+++ b/Middlewares/ST/STM32_WPAN/ble/mesh/Src/mesh_cfg.c
@@ -2,8 +2,8 @@
******************************************************************************
* @file mesh_cfg.c
* @author BLE Mesh Team
-* @version V1.10.000
-* @date 15-Jan-2019
+* @version V1.12.000
+* @date 06-12-2019
* @brief User configurable settings for BLE-Mesh
******************************************************************************
* @attention
@@ -32,7 +32,7 @@
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
-* Initial BLE-Mesh is built over Motorola’s Mesh over Bluetooth Low Energy
+* Initial BLE-Mesh is built over Motorola's Mesh over Bluetooth Low Energy
* (MoBLE) technology. The present solution is developed and maintained for both
* Mesh library and Applications solely by STMicroelectronics.
*
@@ -41,6 +41,7 @@
/* Includes ------------------------------------------------------------------*/
#include "mesh_cfg.h"
+#include "mesh_cfg_usr.h"
#include "types.h"
#include "ble_mesh.h"
#include "compiler.h"
@@ -49,9 +50,11 @@
#include "light.h"
#include "sensors.h"
#include "vendor.h"
+#include "config_client.h"
#include "light_lc.h"
#include "appli_mesh.h"
#include <string.h>
+#include "time_scene.h"
/* Note: Please use Full Library configuration in project options to use the full
configuration of the C/C++ runtime library for printf and scanf functionality */
@@ -69,6 +72,9 @@
#if ENABLE_APPLI_TEST
#include "appli_test.c"
#endif
+ #if ENABLE_SERIAL_PRVN
+ #include "serial_prvn.c"
+ #endif
#endif
#endif
@@ -81,24 +87,69 @@ MOBLEUINT8 dyn_buffer_m[DYNAMIC_MEMORY_SIZE + \
MAX_APPLICATION_PACKET_SIZE + \
SAR_BUFFER_SIZE + \
NEIGHBOR_TABLE_DYNAMIC_MEMORY_SIZE] = {0};
+
+
+#define MODELDATA_SIZE (MAX_APPLICATION_PACKET_SIZE+16)
+#define MODELS_BUFFER_SIZE (MODELDATA_SIZE)
+
+#ifdef STATIC_MEMORY_ALLOCATION_IN_APPLI
+ALIGN(4)
+MOBLEUINT8 aModelsBuff[MODELS_BUFFER_SIZE];
+
+ALIGN(4)
+MOBLEUINT8 aModelsBuff_Response[MODELS_BUFFER_SIZE];
+
+ALIGN(4)
+MOBLEUINT8 aLowerTptBuff[MODELS_BUFFER_SIZE];
+
+ALIGN(4)
+MOBLEUINT8 aLowerTptFnBuff[16];
+
+ALIGN(4)
+MOBLEUINT8 aLowerTptAppBuff[MAX_APPLICATION_PACKET_SIZE+16];
+
+ALIGN(4)
+MOBLEUINT8 aProvisionParamBuff[448];
+
+ALIGN(4)
+MOBLEUINT8 aAppli_SAR_Buffer[24+MAX_APPLICATION_PACKET_SIZE];
+
+ALIGN(4)
+MOBLEUINT8 aTrans_SegIn_Buffer[40*TPT_SEGMENT_COUNT];
+
+ALIGN(4)
+MOBLEUINT8 aTrans_Seq0_Buffer[40*TPT_SEGMENT_COUNT];
+
+ALIGN(4)
+MOBLEUINT8 aTrans_Out_Buffer[12*TPT_SEGMENT_COUNT];
+
+ALIGN(4)
+MOBLEUINT8 aElementsCC[0x3b8];
+#endif
+
extern const MOBLEUINT8 StaticOobBuff[];
extern const MOBLEUINT8 PubKeyBuff[];
extern const MOBLEUINT8 PrivKeyBuff[];
+extern MOBLEUINT8 NumberOfElements;
__attribute__((aligned(4)))const DynBufferParam_t DynBufferParam =
{
dyn_buffer_m,
(MOBLEUINT16) (DYNAMIC_MEMORY_SIZE + SAR_BUFFER_SIZE ),
(MOBLEUINT16) FRIEND_BUFF_DYNAMIC_MEMORY_SIZE,
(MOBLEUINT16) MAX_APPLICATION_PACKET_SIZE,
- (MOBLEUINT16) NEIGHBOR_TABLE_DYNAMIC_MEMORY_SIZE
+ (MOBLEUINT16) NEIGHBOR_TABLE_DYNAMIC_MEMORY_SIZE,
+ (MOBLEUINT16) MODELS_BUFFER_SIZE
};
+
+
+
const tr_params_t TrParams = TRANSMIT_RECEIVE_PARAMS;
-#if defined(BLUENRG1_DEVICE) || defined(BLUENRG2_DEVICE) /* BLUENRG1 or BLUENRG2 */
+//#if defined(BLUENRG1_DEVICE) || defined(BLUENRG2_DEVICE) /* BLUENRG1 or BLUENRG2 */
const lpn_params_t LpnParams = LOW_POWER_NODE_PARAMS;
-#else
-const lpn_params_t LpnParams;
-#endif
+//#else
+//const lpn_params_t LpnParams;
+//#endif
const fn_params_t FnParams = FRIEND_NODE_PARAMS;
const prvn_params_t PrvnParams = UNPROV_NODE_INFO_PARAMS;
const neighbor_table_init_params_t NeighborTableParams = NEIGHBOR_TABLE_PARAMS;
@@ -107,6 +158,13 @@ const neighbor_table_init_params_t NeighborTableParams = NEIGHBOR_TABLE_PARAMS;
__attribute__((aligned(4))) const MOBLEUINT16 Appli_SIG_Models[]=
{
/*****************************************************************************/
+/** Following Section places Generic MODEL Enabled Client IDs ************/
+/*****************************************************************************/
+
+#ifdef ENABLE_CONFIG_MODEL_CLIENT
+ SIG_MODEL_ID_CONFIG_CLIENT,
+#endif
+ /*****************************************************************************/
/** Following Section places GENERIC MODEL Enabled SERVER IDs ************/
/*****************************************************************************/
@@ -205,7 +263,9 @@ __attribute__((aligned(4))) const MOBLEUINT16 Appli_SIG_Models[]=
#ifdef ENABLE_LIGHT_MODEL_SERVER_HSL_SATURATION
LIGHT_MODEL_SERVER_HSL_SATURATION_MODEL_ID,
#endif
-
+/*****************************************************************************/
+/** Following Section places Light XYL MODEL Enabled SERVER IDs ************/
+/*****************************************************************************/
#ifdef ENABLE_LIGHT_MODEL_SERVER_XYL
LIGHT_MODEL_SERVER_XYL_MODEL_ID,
#endif
@@ -214,6 +274,9 @@ __attribute__((aligned(4))) const MOBLEUINT16 Appli_SIG_Models[]=
LIGHT_MODEL_SERVER_XYL_SETUP_MODEL_ID,
#endif
+/*****************************************************************************/
+/** Following Section places Light LC MODEL Enabled SERVER IDs ************/
+/*****************************************************************************/
#ifdef ENABLE_LIGHT_MODEL_SERVER_LC
LIGHT_MODEL_SERVER_LC_MODEL_ID,
#endif
@@ -233,7 +296,39 @@ __attribute__((aligned(4))) const MOBLEUINT16 Appli_SIG_Models[]=
SENSOR_SETUP_SERVER_MODEL_ID,
#endif
+/*****************************************************************************/
+/** Following Section places Time and Scene MODEL Enabled SERVER IDs ************/
+/*****************************************************************************/
+#ifdef ENABLE_TIME_MODEL_SERVER
+TIME_MODEL_SERVER_MODEL_ID,
+#endif
+#ifdef ENABLE_TIME_MODEL_SERVER_SETUP
+TIME_MODEL_SERVER_SETUP_MODEL_ID,
+#endif
+#ifdef ENABLE_SCENE_MODEL_SERVER
+SCENE_MODEL_SERVER_MODEL_ID,
+#endif
+#ifdef ENABLE_SCENE_MODEL_SERVER_SETUP
+SCENE_MODEL_SERVER_SETUP_MODEL_ID,
+#endif
+
+/*****************************************************************************/
+/** Following Section places Generic MODEL Enabled Client IDs ************/
+/*****************************************************************************/
+#ifdef ENABLE_GENERIC_MODEL_CLIENT_ONOFF
+ GENERIC_MODEL_CLIENT_ONOFF_MODEL_ID,
+#endif
+
+#ifdef ENABLE_GENERIC_MODEL_CLIENT_LEVEL
+ GENERIC_MODEL_CLIENT_LEVEL_MODEL_ID,
+#endif
+
+#ifdef ENABLE_LIGHT_MODEL_CLIENT_LIGHTNESS
+ LIGHT_MODEL_SERVER_LIGHTNESS_MODEL_ID,
+#endif
+
+
/*****************************************************************************/
/** End of the SIG Server Model IDs ************/
/*****************************************************************************/
@@ -252,12 +347,34 @@ const MOBLEUINT32 Appli_Vendor_Models[]=
0 /* Default entry, do NOT remove */
};
+
+//ALIGN(4)
+__attribute__((aligned(4))) const MOBLEUINT16 Appli_CLIENT_Support_SIG_Models[]=
+{
+ /* Array to define the Models on which subscription and Publication may work
+ for the Provisioner itself */
+ GENERIC_MODEL_SERVER_ONOFF_MODEL_ID,
+// GENERIC_MODEL_SERVER_LEVEL_MODEL_ID,
+// GENERIC_MODEL_SERVER_DEFAULT_TRANSITION_TIME_MODEL_ID,
+// SENSOR_SERVER_MODEL_ID,
+// LIGHT_MODEL_SERVER_LIGHTNESS_MODEL_ID,
+// LIGHT_MODEL_SERVER_LC_MODEL_ID,
+ 0
+};
+
+
#define APPLI_SIG_MODELS_COUNT ( (sizeof(Appli_SIG_Models) / sizeof(Appli_SIG_Models[0]) ) -1 )
/* Subtracted 1 because of last default entry of 0, since users can comment all models */
#define APPLI_VENDOR_MODELS_COUNT ( ( sizeof(Appli_Vendor_Models) / sizeof(Appli_Vendor_Models[0]) ) -1 )
/* Subtracted 1 because of last default entry of 0, since users can comment all models */
+#define APPLI_NODE_SIG_MODELS_COUNT ( (sizeof(Appli_CLIENT_Support_SIG_Models) / sizeof(Appli_CLIENT_Support_SIG_Models[0]) ) -1 )
+/* Subtracted 1 because of last default entry of 0, since users can comment all models */
+
+#define APPLI_NODE_VENDOR_MODELS_COUNT ( ( sizeof(Appli_Vendor_Models) / sizeof(Appli_Vendor_Models[0]) ) -1 )
+/* Subtracted 1 because of last default entry of 0, since users can comment all models */
+
/* Private function prototypes -----------------------------------------------*/
#if (LOW_POWER_FEATURE == 0)
MOBLE_RESULT BnrgmFrndLpnProcess(void* param);
@@ -270,11 +387,41 @@ MOBLE_RESULT BnrgmFrndLpnTranspSegRecvd(void* param);
MOBLE_RESULT BnrgmFrndLpnUpdateKeys(void* param);
MOBLE_RESULT BnrgmFrndMgmtLpnInit(void* param);
#endif /* #if (LOW_POWER_FEATURE == 0) */
+
#if (NEIGHBOR_TABLE_SUPPORTED == 0)
MOBLE_RESULT BLEMesh_NeighborTableInit(void* param);
void BLEMesh_UpdateNeighbors(void* param);
#endif /* #if (NEIGHBOR_TABLE_SUPPORTED == 0) */
+#if (PB_ADV_SUPPORTED == 0)
+MOBLE_RESULT MoblePBADVInit(void* param);
+MOBLE_RESULT MoblePBADVProcessData(void* param);
+MOBLE_RESULT MoblePBADVStartProvisioning(void* param);
+MOBLE_RESULT MoblePBADVStopProvisioning(void* param);
+#endif
+
+MOBLEUINT8 ApplicationSetNodeSigModelList(void);
+
+#if (FRIEND_FEATURE == 0)
+void BnrgmFrndFnProcess(void* param);
+MOBLE_RESULT BnrgmFrndFnProcessFrndClear(void* param);
+MOBLE_RESULT BnrgmFrndFnProcessFrndClearConf(void* param);
+MOBLE_RESULT BnrgmFrndFnProcessFrndPoll(void* param);
+MOBLE_RESULT BnrgmFrndFnProcessFrndRequest(void* param);
+MOBLE_RESULT BnrgmFrndFnProcessFrndSubscrListAdd(void* param);
+MOBLE_RESULT BnrgmFrndFnProcessFrndSubscrListRem(void* param);
+MOBLE_RESULT BnrgmFrndFnSendFrndClear(void* param);
+MOBLE_RESULT BnrgmFrndFnSwitchKeys(void* param);
+MOBLE_RESULT BnrgmFrndFnUpdateKeys(void* param);
+MOBLE_RESULT BnrgmFrndMgmtFnInit(void* param);
+MOBLE_RESULT BnrgmFrndMgmtGetFriendshipStatus(void* param);
+MOBLEUINT32 BnrgmFrndMgmtGetLpnPollTimeout(void* param);
+MOBLE_RESULT BnrgmFrndMgmtGetSubscrStatus(void* param);
+MOBLE_RESULT BnrgmFrndMgmtQueLpnPkt(void* param);
+void BnrgmFrndMgmtSendSecurityUpdate(void* param);
+#endif /* #if (FRIEND_FEATURE == 0) */
+
+void* GetModelsResponseBuffer(void);
/* Private functions ---------------------------------------------------------*/
@@ -282,9 +429,10 @@ void BLEMesh_UpdateNeighbors(void* param);
* @brief ApplicationGetSigModelList: This function provides the list of the
* SIG Models to the calling function
* @param pModels_sig_ID: Pointer of the array to be filled with SIG Models list
+* @param elementIndex: Index of the element for Model List
* retval Count of the SIG Model Servers enabled in the Application
*/
-MOBLEUINT8 ApplicationGetSigModelList(MOBLEUINT16* pModels_sig_ID)
+MOBLEUINT8 ApplicationGetSigModelList(MOBLEUINT16* pModels_sig_ID, MOBLEUINT8 elementIndex)
{
/* Since the SIG Models are 2 bytes, copy 2*size for memcpy */
if (APPLI_SIG_MODELS_COUNT != 0)
@@ -294,14 +442,50 @@ MOBLEUINT8 ApplicationGetSigModelList(MOBLEUINT16* pModels_sig_ID)
return APPLI_SIG_MODELS_COUNT;
}
+/**
+* @brief ApplicationGetCLIENTSigModelList: This function provides the list of the
+* SIG Models to the calling function
+* @param pModels_sig_ID: Pointer of the array to be filled with SIG Models list
+* @param elementIndex: Index of the element for Model List
+* retval Count of the SIG Model Servers enabled in the Application
+*/
+MOBLEUINT8 ApplicationGetCLIENTSigModelList(MOBLEUINT16* pModels_sig_ID, MOBLEUINT8 elementIndex)
+{
+ /* Since the SIG Models are 2 bytes, copy 2*size for memcpy */
+ if (APPLI_NODE_SIG_MODELS_COUNT != 0)
+ {
+ memcpy(pModels_sig_ID, Appli_CLIENT_Support_SIG_Models, APPLI_NODE_SIG_MODELS_COUNT*2);
+ }
+ return APPLI_SIG_MODELS_COUNT;
+}
+
+#ifdef ENABLE_PROVISIONER_FEATURE
+/**
+* @brief ApplicationGetCLIENTSigModelList: This function provides the list of the
+* SIG Models to the calling function
+* @param pModels_sig_ID: Pointer of the array to be filled with SIG Models list
+* @param elementIndex: Index of the element for Model List
+* retval Count of the SIG Model Servers enabled in the Application
+*/
+MOBLEUINT8 ApplicationSetNodeSigModelList(void)
+{
+ /* Since the SIG Models are 2 bytes, copy 2*size for memcpy */
+ if (APPLI_SIG_MODELS_COUNT != 0)
+ {
+ BLEMeshSetSelfModelList(NumberOfElements);
+ }
+ return APPLI_SIG_MODELS_COUNT;
+}
+#endif
/**
* @brief ApplicationGetVendorModelList: This function provides the list of the
* Vendor Models to the calling function
* @param pModels_sig_ID: Pointer of the array to be filled with Vendor Models list
+* @param elementIndex: Index of the element for Model List
* retval Count of the Vendor Model Servers enabled in the Application
*/
-MOBLEUINT8 ApplicationGetVendorModelList(MOBLEUINT32* pModels_vendor_ID)
+MOBLEUINT8 ApplicationGetVendorModelList(MOBLEUINT32* pModels_vendor_ID, MOBLEUINT8 elementIndex)
{
/* Since the Vendor Models are 4 bytes, copy 4*size for memcpy */
if (APPLI_VENDOR_MODELS_COUNT != 0)
@@ -320,16 +504,16 @@ MOBLEUINT8 ApplicationGetVendorModelList(MOBLEUINT32* pModels_vendor_ID)
*/
MOBLEBOOL ApplicationChkSigModelActive(MOBLEUINT16 modelID)
{
- MOBLEUINT8 index;
+ MOBLEINT8 index = 0;
MOBLEBOOL result = MOBLE_FALSE;
for(index = 0; index < APPLI_SIG_MODELS_COUNT; index++)
{
- if ( modelID == Appli_SIG_Models[index] )
- {
- result = MOBLE_TRUE;
+ if ( modelID == Appli_SIG_Models[index] )
+ {
+ result = MOBLE_TRUE;
break;
- }
+ }
}
return result;
@@ -360,6 +544,95 @@ MOBLEBOOL ApplicationChkVendorModelActive(MOBLEUINT32 modelID)
return result;
}
+
+/**
+* @brief GetModel Data buffer to use by the library
+* @param none
+* retval void* Pointer to the used buffer
+*/
+#ifdef STATIC_MEMORY_ALLOCATION_IN_APPLI
+
+void* GetMemoryDataBuffer(MOBLEUINT8 buffer_type, MOBLEUINT32 u32length)
+{
+ void* ptr = NULL;
+ MOBLEUINT32 allocated_len;
+
+ switch (buffer_type)
+ {
+ case MESH_MODEL_BUFFER:
+ case HEALTH_MODEL_NEW_BUFFER:
+ case HEALTH_MODEL_PUBLISH_BUFFER:
+ ptr = &aModelsBuff[0];
+ allocated_len = sizeof(aModelsBuff);
+ break;
+
+ case MESH_MODEL_RESPONSE_BUFFER:
+ case VENDOR_MODEL_WRITE_BUFFER:
+ case VENDOR_MODEL_WRITE_PUBLISHBUFFER:
+ case VENDOR_MODEL_RESPONSE_BUFFER:
+ case GENERIC_MODEL_REPLY_BUFFER:
+ case GENERIC_MODEL_SENDREMOTE_BUFFER:
+ case GENERIC_MODEL_SENDDATA_BUFFER:
+ case CONFIG_MODEL_PUBLISH_BUFFER:
+ ptr = &aModelsBuff_Response[0];
+ allocated_len = sizeof(aModelsBuff_Response);
+ break;
+
+ case MESH_LOWER_TPT_BUFFER:
+ ptr = &aLowerTptBuff[0];
+ allocated_len = sizeof(aLowerTptBuff);
+ break;
+
+ case MESH_LOWER_TPT_FN_BUFFER:
+ ptr = &aLowerTptFnBuff[0];
+ allocated_len = sizeof(aLowerTptFnBuff);
+ break;
+
+ case MESH_LOWER_TPT_APP_BUFFER:
+ ptr = &aLowerTptAppBuff[0];
+ allocated_len = sizeof(aLowerTptAppBuff);
+ break;
+
+ case PROVISIONER_BUFFER:
+ case PROVISION_NODE_BUFFER:
+ ptr = &aProvisionParamBuff[0];
+ allocated_len = sizeof(aProvisionParamBuff);
+ break;
+
+ case ACCESS_APPLI_BUFFER:
+ ptr = &aAppli_SAR_Buffer[0];
+ allocated_len = sizeof(aAppli_SAR_Buffer);
+
+ case MESH_LOWER_TPT_INSEG:
+ ptr = &aTrans_SegIn_Buffer[0];
+ allocated_len = sizeof(aTrans_SegIn_Buffer);
+ break;
+
+ case MESH_LOWER_TPT_INSEQ0:
+ ptr = &aTrans_Seq0_Buffer[0];
+ allocated_len = sizeof(aTrans_Seq0_Buffer);
+ break;
+
+ case MESH_LOWER_TPT_OUTMSG:
+ ptr = &aTrans_Out_Buffer[0];
+ allocated_len = sizeof(aTrans_Out_Buffer);
+
+ default:
+ break;
+ }
+
+ TRACE_M(TF_MEMORY, "BuffType= %d, RequiredLength=%d, Allocated= %d \r\n", buffer_type, u32length, allocated_len);
+ if (u32length > allocated_len)
+ {
+ TRACE_M(TF_MEMORY, "***<<<ERROR>>> Short buffer Allocated \r\n");
+ }
+
+ return ptr;
+}
+
+
+#endif
+
#if (FRIEND_FEATURE == 0)
void BnrgmFrndFnProcess(void* param)
{
@@ -504,10 +777,22 @@ void BLEMesh_UpdateNeighbors(void* param)
/* Empty functions to reduce code size in case of PB-ADV functionality not in use */
#if (PB_ADV_SUPPORTED == 0)
-MOBLE_RESULT MoblePBADVInit(void* param){return MOBLE_RESULT_SUCCESS;}
-MOBLE_RESULT MoblePBADVProcessData(void* param){return MOBLE_RESULT_SUCCESS;}
-MOBLE_RESULT MoblePBADVStartProvisioning(void* param){return MOBLE_RESULT_SUCCESS;}
-MOBLE_RESULT MoblePBADVStopProvisioning(void* param){return MOBLE_RESULT_SUCCESS;}
+MOBLE_RESULT MoblePBADVInit(void* param)
+{
+ return MOBLE_RESULT_SUCCESS;
+}
+MOBLE_RESULT MoblePBADVProcessData(void* param)
+{
+ return MOBLE_RESULT_SUCCESS;
+}
+MOBLE_RESULT MoblePBADVStartProvisioning(void* param)
+{
+ return MOBLE_RESULT_SUCCESS;
+}
+MOBLE_RESULT MoblePBADVStopProvisioning(void* param)
+{
+ return MOBLE_RESULT_SUCCESS;
+}
#endif
/* PLEASE REFER TO THE .h file for different settings */