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 'Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_MeshLightingLPN/STM32_WPAN/app/appli_light_lc.c')
-rw-r--r--Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_MeshLightingLPN/STM32_WPAN/app/appli_light_lc.c453
1 files changed, 361 insertions, 92 deletions
diff --git a/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_MeshLightingLPN/STM32_WPAN/app/appli_light_lc.c b/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_MeshLightingLPN/STM32_WPAN/app/appli_light_lc.c
index a7d123c91..953e880bd 100644
--- a/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_MeshLightingLPN/STM32_WPAN/app/appli_light_lc.c
+++ b/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_MeshLightingLPN/STM32_WPAN/app/appli_light_lc.c
@@ -39,138 +39,407 @@
/* Private macro -------------------------------------------------------------*/
/* Private variable ----------------------------------------------------------*/
-Appli_LightLC_Set_t Appli_LightLC_set;
-Appli_Light_LC_PropertySet_t Appli_LightLC_PropertySet;
+__attribute__((aligned(4)))const light_lc_cb_t AppliLightLc_cb =
+{
+ Appli_LightLCs_ModeGet,
+ Appli_LightLCs_ModeSet,
+ Appli_LightLCs_ModeSetUnack,
+ Appli_LightLCs_ModeStatus,
+ Appli_LightLCs_OmGet,
+ Appli_LightLCs_OmSet,
+ Appli_LightLCs_OmSetUnack,
+ Appli_LightLCs_OmStatus,
+ Appli_LightLCs_OnOffGet,
+ Appli_LightLCs_OnOffSet,
+ Appli_LightLCs_OnOffSetUnack,
+ Appli_LightLCs_OnOffStatus,
+ Appli_LightLCs_PropertyGet,
+ Appli_LightLCs_PropertySet,
+ Appli_LightLCs_PropertySetUnack,
+ Appli_LightLCs_PropertyStatus
+};
-MOBLEUINT16 AmbientLuxLevel;
/* Private function prototypes -----------------------------------------------*/
/* Private functions ---------------------------------------------------------*/
-
/**
-* @brief Appli_Light_LCMode_Set: This function is callback for Application
-* when Light LC mode Set message is received
-* @param pLight_LC_Param: Pointer to the parameters received for message
-* @param OptionalValid: Flag to inform about the validity of optional parameters
-* @retval MOBLE_RESULT
+ * @brief Callback corresponding to LightLCs_ModeGet_cb
+ * @param Message parameters
+ * @retval None
*/
-MOBLE_RESULT Appli_LightLC_Mode_Set(Light_LC_Param_t* pLight_LC_Param,
- MOBLEUINT8 OptionalValid)
+void Appli_LightLCs_ModeGet(MODEL_MessageHeader_t *pmsgParam)
{
- Appli_LightLC_set.LC_mode = pLight_LC_Param->LC_mode;
- TRACE_M(TF_SERIAL_CTRL,"Mode Set: %d\n\r",
- pLight_LC_Param->LC_mode);
- return MOBLE_RESULT_SUCCESS;
+ TRACE_M(TF_LIGHT_LC, "Element index %d peer addr %X dst peer %X\r\n",
+ pmsgParam->elementIndex, pmsgParam->peer_addr, pmsgParam->dst_peer);
}
+
/**
-* @brief Appli_LightLC_OM_Set: This function is callback for Application
-* when Light LC mode Occupancy Model Set message is received
-* @param pLight_LC_Param: Pointer to the parameters received for message
-* @param OptionalValid: Flag to inform about the validity of optional parameters
-* @retval MOBLE_RESULT
+ * @brief Callback corresponding to LightLCs_ModeSet_cb
+ * @param Data
+ * @param Message parameters
+ * @retval None
*/
-MOBLE_RESULT Appli_LightLC_OM_Set(Light_LC_Param_t* pLight_LC_Param,
- MOBLEUINT8 OptionalValid)
+void Appli_LightLCs_ModeSet(MOBLEUINT8 const* pRxData, MODEL_MessageHeader_t *pmsgParam)
{
- Appli_LightLC_set.LC_OM = pLight_LC_Param->LC_OM;
- TRACE_M(TF_SERIAL_CTRL,"OM Set: %d\n\r",
- pLight_LC_Param->LC_OM);
- return MOBLE_RESULT_SUCCESS;
-}
+ TRACE_M(TF_LIGHT_LC, "Element index %d peer addr %X dst peer %X\r\n",
+ pmsgParam->elementIndex, pmsgParam->peer_addr, pmsgParam->dst_peer);
+}
+
/**
-* @brief Appli_LightLC_OnOff_Set: This function is callback for Application
-* when Light LC On Off Set message is received
-* @param pLight_LC_Param: Pointer to the parameters received for message
-* @param OptionalValid: Flag to inform about the validity of optional parameters
-* @retval MOBLE_RESULT
+ * @brief Callback corresponding to LightLCs_ModeSetUnack_cb
+ * @param Data
+ * @param Message parameters
+ * @retval None
*/
-MOBLE_RESULT Appli_LightLC_OnOff_Set(Light_LC_Param_t* pLight_LC_Param,
- MOBLEUINT8 OptionalValid)
+void Appli_LightLCs_ModeSetUnack(MOBLEUINT8 const* pRxData, MODEL_MessageHeader_t *pmsgParam)
{
- Appli_LightLC_set.Light_OnOffState = pLight_LC_Param->Present_Light_OnOff;
- TRACE_M(TF_SERIAL_CTRL,"OnOff Set: %d\n\r",
- pLight_LC_Param->Present_Light_OnOff);
- return MOBLE_RESULT_SUCCESS;
-}
+ TRACE_M(TF_LIGHT_LC, "Element index %d peer addr %X dst peer %X\r\n",
+ pmsgParam->elementIndex, pmsgParam->peer_addr, pmsgParam->dst_peer);
+}
+
/**
-* @brief Get_AmbientLuxLevelOutput: This function is given to calculate the Ambient
- Lux level output from the ambient sensor.
-* @param void:
-* @retval MOBLEUINT16:
-**/
-MOBLEUINT16 Appli_LightLC_Get_AmbientLuxLevelOutput(void)
+ * @brief Callback corresponding to LightLCs_ModeSatus_cb
+ * @param Message parameters
+ * @retval None
+*/
+void Appli_LightLCs_ModeStatus(MOBLEUINT8 const* pLightLCMode_status,
+ MOBLEUINT32 plength,
+ MOBLEUINT16 dstPeer,
+ MOBLEUINT8 elementIndex)
+{
+ MOBLEUINT8 i;
+ TRACE_M(TF_LIGHT_LC,"LightLCs_ModeStatus callback received for element %d \r\n", elementIndex);
+ TRACE_M(TF_SERIAL_CTRL,"#8294!\r\n");
+
+ for(i = 0; i < plength; i++)
+ {
+ if(i == 0)
+ TRACE_M(TF_SERIAL_CTRL,"Light LC Mode value: %d\n\r",
+ pLightLCMode_status[i]);
+ }
+}
+
+
+/**
+ * @brief Callback corresponding to LightLCs_OmGet_cb
+ * @param Message parameters
+ * @retval None
+ */
+void Appli_LightLCs_OmGet(MODEL_MessageHeader_t *pmsgParam)
{
- /* Use AmbientLuxLevel global variable to store the value from ambient lux sensor
- and then use this value to copmpare the lux level output from state machine.
- */
+ TRACE_M(TF_LIGHT_LC, "Element index %d peer addr %X dst peer %X\r\n",
+ pmsgParam->elementIndex, pmsgParam->peer_addr, pmsgParam->dst_peer);
+}
- return AmbientLuxLevel;
+
+/**
+ * @brief Callback corresponding to LightLCs_OmSet_cb
+ * @param Data
+ * @param Message parameters
+ * @retval None
+ */
+void Appli_LightLCs_OmSet(MOBLEUINT8 const* pRxData, MODEL_MessageHeader_t *pmsgParam)
+{
+ TRACE_M(TF_LIGHT_LC, "Element index %d peer addr %X dst peer %X\r\n",
+ pmsgParam->elementIndex, pmsgParam->peer_addr, pmsgParam->dst_peer);
}
+
/**
-* @brief Light_LC_LuxLevelPIRegulator: This function will calculate all the parameter
-* Kid,kpu,kiu,kpd and return the value Light Lightness Linear.
-* @param tableLuxLevel:
-* @param ambientLuxLevel:
-* @retval MOBLEUINT16:
-**/
-MOBLEUINT16 Appli_Light_LC_PIRegulatorOutput(MOBLEUINT16 tableLuxLevel,MOBLEUINT16 ambientLuxLevel)
+ * @brief Callback corresponding to LightLCs_OmSetUnack_cb
+ * @param Data
+ * @param Message parameters
+ * @retval None
+ */
+void Appli_LightLCs_OmSetUnack(MOBLEUINT8 const* pRxData, MODEL_MessageHeader_t *pmsgParam)
{
- MOBLEUINT16 luxLevel = 0;
- /* User can write their code for the calculation */
+ TRACE_M(TF_LIGHT_LC, "Element index %d peer addr %X dst peer %X\r\n",
+ pmsgParam->elementIndex, pmsgParam->peer_addr, pmsgParam->dst_peer);
+}
+
+/**
+ * @brief Callback corresponding to LightLCs_OmStatus_cb
+ * @param Message parameters
+ * @retval None
+ */
+void Appli_LightLCs_OmStatus(MOBLEUINT8 const* pLightLCOccupancyMode_status,
+ MOBLEUINT32 plength,
+ MOBLEUINT16 dstPeer,
+ MOBLEUINT8 elementIndex)
+{
+ MOBLEUINT8 i;
+ TRACE_M(TF_LIGHT_LC,"LightLCs_OmStatus callback received for element %d \r\n", elementIndex);
+ TRACE_M(TF_SERIAL_CTRL,"#8298!\r\n");
- return luxLevel;
+ for(i = 0; i < plength; i++)
+ {
+ if(i == 0)
+ TRACE_M(TF_SERIAL_CTRL,"Light LC OM value: %d\n\r",
+ pLightLCOccupancyMode_status[i]);
+ }
+}
+
+
+/**
+ * @brief Callback corresponding to LightLCs_OnOffGet_cb
+ * @param Message parameters
+ * @retval None
+ */
+void Appli_LightLCs_OnOffGet(MODEL_MessageHeader_t *pmsgParam)
+{
+ TRACE_M(TF_LIGHT_LC, "Element index %d peer addr %X dst peer %X\r\n",
+ pmsgParam->elementIndex, pmsgParam->peer_addr, pmsgParam->dst_peer);
}
+
/**
-* @brief Appli_LightLC_Get_ModeStatus: This function is callback for Application
-* to get the application values in middleware used for transition change.
-* @param plcModeState: Pointer to the status message
-* @retval MOBLE_RESULT
+ * @brief Callback corresponding to LightLC_OnOffSet_cb
+ * @param Data
+ * @param Message parameters
+ * @retval None
*/
-MOBLE_RESULT Appli_LightLC_Get_ModeStatus(MOBLEUINT8* plcModeState)
+void Appli_LightLCs_OnOffSet(MOBLEUINT8 const* pRxData, MODEL_MessageHeader_t *pmsgParam)
{
- *(plcModeState) = Appli_LightLC_set.LC_mode;
- TRACE_M(TF_SERIAL_CTRL,"Get Mode Status: %d\n\r",
- Appli_LightLC_set.LC_mode);
+ TRACE_M(TF_LIGHT_LC, "Element index %d peer addr %X dst peer %X\r\n",
+ pmsgParam->elementIndex, pmsgParam->peer_addr, pmsgParam->dst_peer);
+}
- return MOBLE_RESULT_SUCCESS;
+
+/**
+ * @brief Callback corresponding to LightLCs_OnOffSetUnack_cb
+ * @param Data
+ * @param Message parameters
+ * @retval None
+*/
+void Appli_LightLCs_OnOffSetUnack(MOBLEUINT8 const* pRxData, MODEL_MessageHeader_t *pmsgParam)
+{
+ TRACE_M(TF_LIGHT_LC, "Element index %d peer addr %X dst peer %X\r\n",
+ pmsgParam->elementIndex, pmsgParam->peer_addr, pmsgParam->dst_peer);
}
+
/**
-* @brief Appli_LightLC_Get_OMModeStatus: This function is callback for Application
-* to get the application values in middleware used for transition change.
-* @param plcOM_ModeState: Pointer to the status message
-* @retval MOBLE_RESULT
+ * @brief Callback corresponding to LightLCs_OnOffStatus_cb
+ * @param Data
+ * @param Message parameters
+ * @retval None
*/
-MOBLE_RESULT Appli_LightLC_Get_OMModeStatus(MOBLEUINT8* plcOM_ModeState)
-{
- *(plcOM_ModeState) = Appli_LightLC_set.LC_OM;
- TRACE_M(TF_SERIAL_CTRL,"Get OM Mode Status: %d\n\r",
- Appli_LightLC_set.LC_OM);
+void Appli_LightLCs_OnOffStatus(MOBLEUINT8 const* pLightLCOnOff_status,
+ MOBLEUINT32 plength,
+ MOBLEUINT16 dstPeer,
+ MOBLEUINT8 elementIndex)
+{
+ MOBLEUINT8 i;
+ TRACE_M(TF_LIGHT_LC,"LightLCs_OnOffStatus callback received for element %d \r\n", elementIndex);
+ TRACE_M(TF_SERIAL_CTRL,"#829C!\r\n");
- return MOBLE_RESULT_SUCCESS;
+ for(i = 0; i < plength; i++)
+ {
+ if(i == 0)
+ TRACE_M(TF_SERIAL_CTRL,"Light LC OnOff status: %d\n\r",
+ pLightLCOnOff_status[i]);
+ }
+}
+
+
+/**
+ * @brief Callback corresponding to LightLCs_PropertyGet_cb
+ * @param Data
+ * @param Message parameters
+ * @retval None
+*/
+void Appli_LightLCs_PropertyGet(MOBLEUINT8 const* pRxData, MODEL_MessageHeader_t *pmsgParam)
+{
+ TRACE_M(TF_LIGHT_LC, "Element index %d peer addr %X dst peer %X\r\n",
+ pmsgParam->elementIndex, pmsgParam->peer_addr, pmsgParam->dst_peer);
}
+
+/**
+ * @brief Callback corresponding to LightLCs_PropertySet_cb
+ * @param Data
+ * @param Message parameters
+ * @retval None
+ */
+void Appli_LightLCs_PropertySet(MOBLEUINT8 const* pRxData, MODEL_MessageHeader_t *pmsgParam)
+{
+ TRACE_M(TF_LIGHT_LC, "Element index %d peer addr %X dst peer %X\r\n",
+ pmsgParam->elementIndex, pmsgParam->peer_addr, pmsgParam->dst_peer);
+}
+
+
+/**
+ * @brief Callback corresponding to LightLCs_PropertySetUnack_cb
+ * @param Data
+ * @param Message parameters
+ * @retval None
+ */
+void Appli_LightLCs_PropertySetUnack(MOBLEUINT8 const* pRxData, MODEL_MessageHeader_t *pmsgParam)
+ {
+ TRACE_M(TF_LIGHT_LC, "Element index %d peer addr %X dst peer %X\r\n",
+ pmsgParam->elementIndex, pmsgParam->peer_addr, pmsgParam->dst_peer);
+ }
+
+
/**
-* @brief Appli_LightLC_Get_OnOffStatus: This function is callback for Application
-* to get the application values in middleware used for transition change.
-* @param plcOnOffState: Pointer to the status message
-* @retval MOBLE_RESULT
+ * @brief Callback corresponding to LightLCs_PropertyStatus_cb
+ * @param Data
+ * @param Message parameters
+ * @retval None
*/
-MOBLE_RESULT Appli_LightLC_Get_OnOffStatus(MOBLEUINT8* plcOnOffState)
-{
- *(plcOnOffState) = Appli_LightLC_set.Light_OnOffState;
- *(plcOnOffState+1) = Appli_LightLC_set.Light_OnOffState;
- *(plcOnOffState+2) = Appli_LightLC_set.Light_OnOffState;
- TRACE_M(TF_SERIAL_CTRL,"Get On Off Status: %d\n\r",
- Appli_LightLC_set.Light_OnOffState);
+void Appli_LightLCs_PropertyStatus(MOBLEUINT8 const* pLightLCProperty_status,
+ MOBLEUINT32 plength,
+ MOBLEUINT16 dstPeer,
+ MOBLEUINT8 elementIndex)
+{
+ MOBLEUINT8 i;
+ TRACE_M(TF_LIGHT_LC,"LightLCs_PropertyStatus callback received for element %d \r\n", elementIndex);
+ TRACE_M(TF_SERIAL_CTRL,"#64!\r\n");
- return MOBLE_RESULT_SUCCESS;
-}
+ for(i = 0; i < plength; i++)
+ {
+ if(i == 0)
+ TRACE_M(TF_SERIAL_CTRL,"Light LC Property status: %d\n\r",
+ pLightLCProperty_status[i]);
+ }
+}
+
+
+/**
+ * @brief
+ * @param
+ * @retval
+ */
+__weak MOBLE_RESULT Appli_Light_LCs_Init(void)
+ {
+ MOBLE_RESULT result = MOBLE_RESULT_FAIL;
+ MOBLEUINT8 lcsElementIndex = 0;
+
+ /* Extract element index of LC server */
+ result = ExtractLcServerElementIndex(&lcsElementIndex,
+#ifdef APPLICATION_NUMBER_OF_ELEMENTS
+ APPLICATION_NUMBER_OF_ELEMENTS,
+#else
+ 0,
+#endif
+#ifdef ENABLE_LIGHT_MODEL_SERVER_LC
+ ENABLE_LIGHT_MODEL_SERVER_LC,
+ ENABLE_LIGHT_MODEL_SERVER_LC_SETUP,
+#else
+ 0,
+ 0,
+#endif
+#ifdef ENABLE_GENERIC_MODEL_SERVER_ONOFF
+ ENABLE_GENERIC_MODEL_SERVER_ONOFF,
+#else
+ 0,
+#endif
+#ifdef ENABLE_GENERIC_MODEL_SERVER_POWER_ONOFF
+ ENABLE_GENERIC_MODEL_SERVER_POWER_ONOFF,
+#else
+ 0,
+#endif
+#ifdef ENABLE_LIGHT_MODEL_SERVER_LIGHTNESS
+ ENABLE_LIGHT_MODEL_SERVER_LIGHTNESS);
+#else
+ 0);
+#endif
+
+ if(MOBLE_SUCCEEDED(result))
+ {
+ result = Light_LCs_Init(&BufferLcServer, lcsElementIndex, &AppliLightLc_cb, SIZE_OF_LC_SERVER_T);
+ }
+
+ if(MOBLE_FAILED(result))
+ {
+ TRACE_M(TF_LIGHT_LC, "Light LC Server init failed\r\n");
+ }
+
+ return result;
+}
+
+
+/**
+ * @brief
+ * @param
+ * @retval
+ */
+__weak MOBLE_RESULT Appli_Light_LC_SensorPropertyUpdate(MOBLEUINT8 elementIndex,
+ MOBLEUINT16 propertyId,
+ MOBLEUINT32 value)
+{
+ return Light_LC_SensorPropertyUpdate(elementIndex,
+ propertyId,
+ value);
+}
+
+#ifdef ENABLE_LIGHT_MODEL_SERVER_LC
+/**
+ * @brief Handling of serial inputs to LC model
+ * @param serial string
+ * @param serial string size
+ * @retval void
+ */
+void Appli_Light_LC_SerialCmd(char *rcvdStringBuff, uint16_t rcvdStringSize)
+{
+ MOBLE_RESULT result = MOBLE_RESULT_INVALIDARG;
+
+ if (!strncmp(rcvdStringBuff+6, "TR0", 3))
+ {
+ if (rcvdStringSize == 9)
+ {
+ /* call to function corresponding MMDL/SR/LLC/BV-03-C */
+ result = Light_LC_SetTransitionTimeZero(1);
+ }
+ else
+ {
+ result = MOBLE_RESULT_FAIL;
+ BLEMesh_PrintStringCb("Invalid size of string\r\n");
+ }
+ }
+ else if (!strncmp(rcvdStringBuff+6, "OCCUPANCY", 9)) /* occupancy detect */
+ {
+ if (rcvdStringSize == 15)
+ {
+ /* occupancy detected for element index 0 */
+ Appli_Light_LC_SensorPropertyUpdate(0,
+ PRESENCE_DETECTED_PID,
+ 1);
+ result = MOBLE_RESULT_SUCCESS;
+ }
+ else
+ {
+ result = MOBLE_RESULT_FAIL;
+ BLEMesh_PrintStringCb("Invalid size of string\r\n");
+ }
+ }
+ else
+ {
+ result = MOBLE_RESULT_FAIL;
+ }
+
+ /* Check the result of command processing */
+ if(result == MOBLE_RESULT_SUCCESS)
+ {
+ BLEMesh_PrintStringCb("Success\r\n");
+ }
+ else if(result == MOBLE_RESULT_OUTOFMEMORY)
+ {
+ BLEMesh_PrintStringCb("Fail Out of memory\r\n");
+ }
+ else if(result == MOBLE_RESULT_INVALIDARG)
+ {
+ BLEMesh_PrintStringCb("Fail Invalid Argument\r\n");
+ }
+ else
+ {
+ BLEMesh_PrintStringCb("Fail\r\n");
+ }
+}
+#endif
/**
@@ -181,5 +450,5 @@ MOBLE_RESULT Appli_LightLC_Get_OnOffStatus(MOBLEUINT8* plcOnOffState)
* @}
*/
-/******************* (C) COPYRIGHT 2017 STMicroelectronics *****END OF FILE****/
+/******************* (C) COPYRIGHT 2020 STMicroelectronics *****END OF FILE****/