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.USBDongle/Applications/BLE/BLE_MeshLightingPRFNode/STM32_WPAN/app/appli_light.c')
-rw-r--r--Projects/P-NUCLEO-WB55.USBDongle/Applications/BLE/BLE_MeshLightingPRFNode/STM32_WPAN/app/appli_light.c1189
1 files changed, 754 insertions, 435 deletions
diff --git a/Projects/P-NUCLEO-WB55.USBDongle/Applications/BLE/BLE_MeshLightingPRFNode/STM32_WPAN/app/appli_light.c b/Projects/P-NUCLEO-WB55.USBDongle/Applications/BLE/BLE_MeshLightingPRFNode/STM32_WPAN/app/appli_light.c
index 318929ffc..19face0da 100644
--- a/Projects/P-NUCLEO-WB55.USBDongle/Applications/BLE/BLE_MeshLightingPRFNode/STM32_WPAN/app/appli_light.c
+++ b/Projects/P-NUCLEO-WB55.USBDongle/Applications/BLE/BLE_MeshLightingPRFNode/STM32_WPAN/app/appli_light.c
@@ -6,7 +6,7 @@
******************************************************************************
* @attention
*
- * <h2><center>&copy; Copyright (c) 2019 STMicroelectronics.
+ * <h2><center>&copy; Copyright (c) 2020 STMicroelectronics.
* All rights reserved.</center></h2>
*
* This software component is licensed by ST under Ultimate Liberty license
@@ -41,7 +41,9 @@
* @{
*/
-MOBLE_RESULT Appli_Light_GetLightnessLastStatus(MOBLEUINT8* lLastState);
+MOBLE_RESULT Appli_Light_GetLightnessLastStatus(MOBLEUINT8* lLastState,
+ MOBLEUINT16 dstPeer,
+ MOBLEUINT8 elementIndex);
/* Private typedef -----------------------------------------------------------*/
/* Private define ------------------------------------------------------------*/
/* Private macro -------------------------------------------------------------*/
@@ -55,9 +57,8 @@ Following Variables are used for the LIGHTING Lightness MODEL
/******************************************************************************/
#ifdef ENABLE_LIGHT_MODEL_SERVER_LIGHTNESS
/******************************************************************************/
-
-Appli_Light_lightnessSet ApplilightnessSet = {1,0,0,0,0,0};
-Appli_Light_lightnessLinearSet ApplilightnessLinearSet;
+Appli_Light_lightnessSet ApplilightnessSet[APPLICATION_NUMBER_OF_ELEMENTS] = {{1,0,0,0,0,0}};
+Appli_Light_lightnessLinearSet ApplilightnessLinearSet[APPLICATION_NUMBER_OF_ELEMENTS];
/******************************************************************************/
#endif /* #ifdef ENABLE_LIGHT_MODEL_SERVER_LIGHTNESS */
@@ -70,10 +71,9 @@ Following Variables are used for the LIGHTING CTL MODEL
/******************************************************************************/
#ifdef ENABLE_LIGHT_MODEL_SERVER_CTL
/******************************************************************************/
-
-Appli_Light_CtlSet AppliCtlSet;
-Appli_Light_CtlTemperatureRangeSet AppliCtlTemperatureRangeSet;
-Appli_Light_CtlDefaultSet AppliCtlDefaultSet;
+ Appli_Light_CtlSet AppliCtlSet[APPLICATION_NUMBER_OF_ELEMENTS];
+ Appli_Light_CtlTemperatureRangeSet AppliCtlTemperatureRangeSet[APPLICATION_NUMBER_OF_ELEMENTS];
+ Appli_Light_CtlDefaultSet AppliCtlDefaultSet[APPLICATION_NUMBER_OF_ELEMENTS];
/******************************************************************************/
#endif /* #ifdef ENABLE_LIGHT_MODEL_SERVER_CTL */
@@ -83,14 +83,11 @@ Appli_Light_CtlDefaultSet AppliCtlDefaultSet;
Following Variables are used for the LIGHTING HSL MODEL
*******************************************************************************/
-/*******************************************************************************/
#ifdef ENABLE_LIGHT_MODEL_SERVER_HSL
-/*******************************************************************************/
-
- Appli_Light_HslSet AppliHslSet;
- Appli_Light_HslDefaultSet Appli_HslDefaultSet = {0x7FFF,0x7FFF,0x7FFF};
- Appli_Light_RGBSet Appli_RGBParam;
- Appli_Light_HslRangeSet AppliHslRangeSet;
+ Appli_Light_HslSet AppliHslSet[APPLICATION_NUMBER_OF_ELEMENTS];
+ Appli_Light_HslDefaultSet Appli_HslDefaultSet[APPLICATION_NUMBER_OF_ELEMENTS] = {{0x7FFF,0x7FFF,0x7FFF}};
+ Appli_Light_RGBSet Appli_RGBParam[APPLICATION_NUMBER_OF_ELEMENTS];
+ Appli_Light_HslRangeSet AppliHslRangeSet[APPLICATION_NUMBER_OF_ELEMENTS];
/*******************************************************************************/
#endif /*End of the LIGHTING HSL MODEL variables */
@@ -117,22 +114,28 @@ extern MOBLEUINT16 IntensityValue;
* when Light Lightness Set message is received
* @param pLight_LightnessParam: Pointer to the parameters received for message
* @param OptionalValid: Flag to inform about the validity of optional parameters
+* @param dstPeer: destination send by peer for this node. It can be a
+* unicast or group address
+* @param elementIndex: index of the element received from peer for this node which
+* is elementNumber-1
* @retval MOBLE_RESULT
*/
MOBLE_RESULT Appli_Light_Lightness_Set(Light_LightnessStatus_t* pLight_LightnessParam,
- MOBLEUINT8 OptionalValid)
+ MOBLEUINT8 OptionalValid, MOBLEUINT16 dstPeer,
+ MOBLEUINT8 elementIndex)
{
MOBLEUINT16 duty;
static MOBLEUINT16 previousIntensity = 0;
- TRACE_M(TF_SERIAL_CTRL,"#824C!\n\r");
+ TRACE_M(TF_LIGHT,"Light_Lightness_Set callback received for element %d \r\n", elementIndex);
+ TRACE_M(TF_SERIAL_CTRL,"#824C!\r\n");
- ApplilightnessSet.PresentState16 = pLight_LightnessParam->LightnessPresentValue16;
- ApplilightnessSet.LastLightness16 = pLight_LightnessParam->LightnessLastStatus;
+ ApplilightnessSet[elementIndex].PresentState16 = pLight_LightnessParam->LightnessPresentValue16;
+ ApplilightnessSet[elementIndex].LastLightness16 = pLight_LightnessParam->LightnessLastStatus;
if(pLight_LightnessParam->LightnessPresentValue16 != 0x00)
{
- ApplilightnessSet.LastLightness16 = pLight_LightnessParam->LightnessPresentValue16;
+ ApplilightnessSet[elementIndex].LastLightness16 = pLight_LightnessParam->LightnessPresentValue16;
}
if(((IntensityValue > previousIntensity) && (IntensityValue <PWM_TIME_PERIOD)) ||
@@ -146,6 +149,7 @@ MOBLE_RESULT Appli_Light_Lightness_Set(Light_LightnessStatus_t* pLight_Lightness
}
previousIntensity = IntensityValue;
+#if 0
/* For demo, if Level is more than 100, switch ON the LED */
if(pLight_LightnessParam->LightnessPresentValue16 >= 0x8000)
{
@@ -155,16 +159,17 @@ MOBLE_RESULT Appli_Light_Lightness_Set(Light_LightnessStatus_t* pLight_Lightness
{
BSP_LED_Off(LED_BLUE);
}
- TRACE_M(TF_SERIAL_CTRL,"#8206%04hx!\n\r",ApplilightnessSet.PresentState16);
+#endif
+
+ TRACE_M(TF_SERIAL_CTRL,"#8206%04hx!\n\r",
+ ApplilightnessSet[elementIndex].PresentState16);
- duty = PwmValueMapping(ApplilightnessSet.PresentState16 , 0xfFFF ,0);
+ duty = PwmValueMapping(ApplilightnessSet[elementIndex].PresentState16 , 0xfFFF ,0);
Appli_LightPwmValue.IntensityValue = duty;
Light_UpdateLedValue(LOAD_STATE , Appli_LightPwmValue);
/* set the flag value for NVM store */
- RestoreFlag = LIGHT_LIGHTNESS_NVM_FLAG;
-
- AppliNvm_SaveMessageParam();
+ NvmStatePowerFlag_Set(LIGHT_LIGHTNESS_NVM_FLAG, elementIndex);
return MOBLE_RESULT_SUCCESS;
@@ -181,18 +186,18 @@ MOBLE_RESULT Appli_Light_Lightness_Set(Light_LightnessStatus_t* pLight_Lightness
* @param pLength: length of data
* @retval MOBLE_RESULT
*/
-MOBLE_RESULT Appli_Light_Lightness_Status(MOBLEUINT8 const *pLightness_status, MOBLEUINT32 pLength)
+MOBLE_RESULT Appli_Light_Lightness_Status(MOBLEUINT8 const *pLightness_status, MOBLEUINT32 pLength, MOBLEUINT16 dstPeer,
+ MOBLEUINT8 elementIndex)
{
-#ifdef CFG_DEBUG_TRACE
+#if ( CFG_DEBUG_TRACE != 0 )
MOBLEUINT32 i;
MOBLEUINT16 value = 0;
#endif
- TRACE_M(TF_LIGHT,"Light_Lightness_Status callback received \r\n");
+ TRACE_M(TF_LIGHT,"Light_Lightness_Status callback received for element %d \r\n", elementIndex);
+ TRACE_M(TF_SERIAL_CTRL,"#824E!\r\n");
- TRACE_M(TF_SERIAL_CTRL,"#824E! \n\r");
-
-#ifdef CFG_DEBUG_TRACE
+#if ( CFG_DEBUG_TRACE != 0 )
for(i = 0; i < pLength; i++)
{
if((i == 0) || (i == 2))
@@ -201,28 +206,33 @@ MOBLE_RESULT Appli_Light_Lightness_Status(MOBLEUINT8 const *pLightness_status, M
}
else if(i == 1)
{
- TRACE_M(TF_LIGHT,"Present Lightness: %d \r\n",
- value << 8 | pLightness_status[i]);
+ TRACE_M(TF_LIGHT,"Present Lightness: 0x%x (%d)\r\n",
+ value | pLightness_status[i] << 8,
+ value | pLightness_status[i] << 8);
}
else if(i == 3)
{
- TRACE_M(TF_LIGHT,"Target Lightness: %d \r\n",
- value << 8 | pLightness_status[i]);
+ TRACE_M(TF_LIGHT,"Target Lightness: 0x%x (%d)\r\n",
+ value | pLightness_status[i] << 8,
+ value | pLightness_status[i] << 8);
}
else if(i == 4)
{
- TRACE_M(TF_LIGHT,"Remaining Time: %d \r\n",
+ TRACE_M(TF_LIGHT,"Remaining Time: 0x%x (%d)\r\n",
+ pLightness_status[i],
pLightness_status[i]);
}
}
#endif
+
return MOBLE_RESULT_SUCCESS;
}
+
/******************************************************************************/
#ifdef ENABLE_LIGHT_MODEL_SERVER_LIGHTNESS
/******************************************************************************/
-
+
/**
* @brief Appli_Light_Lightness_Linear_Set: This function is callback for Application
* when Light Lightness Linear Set message is received
@@ -231,11 +241,13 @@ MOBLE_RESULT Appli_Light_Lightness_Status(MOBLEUINT8 const *pLightness_status, M
* @retval MOBLE_RESULT
*/
MOBLE_RESULT Appli_Light_Lightness_Linear_Set(Light_LightnessStatus_t* pLight_LightnessLinearParam,
- MOBLEUINT8 OptionalValid)
+ MOBLEUINT8 OptionalValid, MOBLEUINT16 dstPeer,
+ MOBLEUINT8 elementIndex)
{
- ApplilightnessLinearSet.PresentState16 = pLight_LightnessLinearParam->LinearPresentValue16;
+ ApplilightnessLinearSet[elementIndex].PresentState16 = pLight_LightnessLinearParam->LinearPresentValue16;
- TRACE_M(TF_SERIAL_CTRL,"#8250!\n\r");
+ TRACE_M(TF_LIGHT,"Light_Lightness_Linear_Set callback received for element %d \r\n", elementIndex);
+ TRACE_M(TF_SERIAL_CTRL,"#8250!\r\n");
return MOBLE_RESULT_SUCCESS;
}
@@ -248,20 +260,25 @@ MOBLE_RESULT Appli_Light_Lightness_Linear_Set(Light_LightnessStatus_t* pLight_Li
* @brief Appli_Light_Lightness_Linear_Status: This function is callback for Application
* when Light Lightness Linear status message is received
* @param pLightnessLinear_status: Pointer to the parameters received for message
+* @param dstPeer: destination send by peer for this node. It can be a
+* unicast or group address
+* @param elementIndex: index of the element received from peer for this node which
+* is elementNumber-1
* @param pLength: length of data
* @retval MOBLE_RESULT
*/
-MOBLE_RESULT Appli_Light_Lightness_Linear_Status(MOBLEUINT8 const *pLightnessLinear_status, MOBLEUINT32 pLength)
+MOBLE_RESULT Appli_Light_Lightness_Linear_Status(MOBLEUINT8 const *pLightnessLinear_status, MOBLEUINT32 pLength, MOBLEUINT16 dstPeer,
+ MOBLEUINT8 elementIndex)
{
-#ifdef CFG_DEBUG_TRACE
+#if ( CFG_DEBUG_TRACE != 0 )
MOBLEUINT32 i;
MOBLEUINT16 value = 0;
#endif
- TRACE_M(TF_LIGHT,"Light_Lightness_Linear_Status callback received \r\n");
- TRACE_M(TF_SERIAL_CTRL,"#8252! \n\r");
+ TRACE_M(TF_LIGHT,"Light_Lightness_Linear_Status callback received for element %d \r\n", elementIndex);
+ TRACE_M(TF_SERIAL_CTRL,"#8252!\r\n");
-#ifdef CFG_DEBUG_TRACE
+#if ( CFG_DEBUG_TRACE != 0 )
for(i = 0; i < pLength; i++)
{
if((i == 0) || (i == 2))
@@ -270,24 +287,29 @@ MOBLE_RESULT Appli_Light_Lightness_Linear_Status(MOBLEUINT8 const *pLightnessLin
}
else if(i == 1)
{
- TRACE_M(TF_LIGHT,"Present Lightness: %d \r\n",
- value << 8 | pLightnessLinear_status[i]);
+ TRACE_M(TF_LIGHT,"Present Lightness: 0x%x (%d)\r\n",
+ value | pLightnessLinear_status[i] << 8,
+ value | pLightnessLinear_status[i] << 8);
}
else if(i == 3)
{
- TRACE_M(TF_LIGHT,"Target Lightness: %d \r\n",
- value << 8 | pLightnessLinear_status[i]);
+ TRACE_M(TF_LIGHT,"Target Lightness: 0x%x (%d)\r\n",
+ value | pLightnessLinear_status[i] << 8,
+ value | pLightnessLinear_status[i] << 8);
}
else if(i == 4)
{
- TRACE_M(TF_LIGHT,"Remaining Time: %d \r\n",
+ TRACE_M(TF_LIGHT,"Remaining Time: 0x%x (%d)\r\n",
+ pLightnessLinear_status[i],
pLightnessLinear_status[i]);
}
}
#endif
+
return MOBLE_RESULT_SUCCESS;
}
+
/******************************************************************************/
#ifdef ENABLE_LIGHT_MODEL_SERVER_LIGHTNESS_SETUP
/******************************************************************************/
@@ -297,11 +319,17 @@ MOBLE_RESULT Appli_Light_Lightness_Linear_Status(MOBLEUINT8 const *pLightnessLin
* when Light Lightness Default Set message is received
* @param pLight_LightnessDefaultParam: Pointer to the parameters received for message
* @param OptionalValid: Flag to inform about the validity of optional parameters
+* @param dstPeer: destination send by peer for this node. It can be a
+* unicast or group address
+* @param elementIndex: index of the element received from peer for this node which
+* is elementNumber-1
* @retval MOBLE_RESULT
*/
MOBLE_RESULT Appli_Light_Lightness_Default_Set(Light_LightnessDefaultParam_t* pLight_LightnessDefaultParam,
- MOBLEUINT8 OptionalValid)
+ MOBLEUINT8 OptionalValid, MOBLEUINT16 dstPeer,
+ MOBLEUINT8 elementIndex)
{
+#if 0
if(pLight_LightnessDefaultParam->LightnessDefaultStatus > 0)
{
BSP_LED_On(LED_BLUE);
@@ -310,14 +338,16 @@ MOBLE_RESULT Appli_Light_Lightness_Default_Set(Light_LightnessDefaultParam_t* pL
{
BSP_LED_Off(LED_BLUE);
}
- ApplilightnessSet.LightnessDefault = pLight_LightnessDefaultParam->LightnessDefaultStatus;
+#endif
+
+ ApplilightnessSet[elementIndex].LightnessDefault =
+ pLight_LightnessDefaultParam->LightnessDefaultStatus;
+
+ TRACE_M(TF_LIGHT,"Light_Lightness_Default_Set callback received for element %d \r\n", elementIndex);
+ TRACE_M(TF_SERIAL_CTRL,"#8259! \r\n");
- TRACE_M(TF_SERIAL_CTRL,"#8259!\n\r");
-
/* set the flag value for NVM store */
- RestoreFlag = LIGHT_LIGHTNESS_NVM_FLAG;
-
- AppliNvm_SaveMessageParam();
+ NvmStatePowerFlag_Set(LIGHT_LIGHTNESS_NVM_FLAG,elementIndex);
return MOBLE_RESULT_SUCCESS;
}
@@ -331,19 +361,25 @@ MOBLE_RESULT Appli_Light_Lightness_Default_Set(Light_LightnessDefaultParam_t* pL
* when Light Lightness Default status message is received
* @param pLightnessDefault_status: Pointer to the parameters received for message
* @param pLength: length of data
+* @param dstPeer: destination send by peer for this node. It can be a
+* unicast or group address
+* @param elementIndex: index of the element received from peer for this node which
+* is elementNumber-1
* @retval MOBLE_RESULT
*/
-MOBLE_RESULT Appli_Light_Lightness_Default_Status(MOBLEUINT8 const *pLightnessDefault_status, MOBLEUINT32 pLength)
+MOBLE_RESULT Appli_Light_Lightness_Default_Status(MOBLEUINT8 const *pLightnessDefault_status, MOBLEUINT32 pLength
+ , MOBLEUINT16 dstPeer,
+ MOBLEUINT8 elementIndex)
{
-#ifdef CFG_DEBUG_TRACE
+#if ( CFG_DEBUG_TRACE != 0 )
MOBLEUINT32 i;
- MOBLEUINT16 value = 0;
- #endif
- TRACE_M(TF_LIGHT,"Light_Lightness_Default_Status callback received \r\n");
+ MOBLEUINT16 value;
+#endif
- TRACE_M(TF_SERIAL_CTRL,"#8256! \n\r");
+ TRACE_M(TF_LIGHT,"Light_Lightness_Default_Status callback received for element %d \r\n", elementIndex);
+ TRACE_M(TF_SERIAL_CTRL,"#8256!\r\n");
-#ifdef CFG_DEBUG_TRACE
+#if ( CFG_DEBUG_TRACE != 0 )
for(i = 0; i < pLength; i++)
{
if(i == 0)
@@ -352,14 +388,61 @@ MOBLE_RESULT Appli_Light_Lightness_Default_Status(MOBLEUINT8 const *pLightnessDe
}
else if(i == 1)
{
- TRACE_M(TF_LIGHT,"Lightness: %d \r\n",
- value << 8 | pLightnessDefault_status[i]);
+ TRACE_M(TF_LIGHT,"Lightness Default: 0x%x (%d)\r\n",
+ value | pLightnessDefault_status[i] << 8,
+ value | pLightnessDefault_status[i] << 8);
}
}
#endif
+
return MOBLE_RESULT_SUCCESS;
}
+
+/**
+* @brief Appli_Light_Lightness_Last_Status: This function is callback for Application
+* when Light Lightness Last status message is received
+* @param pLightnessDefault_status: Pointer to the parameters received for message
+* @param pLength: length of data
+* @param dstPeer: destination send by peer for this node. It can be a
+* unicast or group address
+* @param elementIndex: index of the element received from peer for this node which
+* is elementNumber-1
+* @retval MOBLE_RESULT
+*/
+MOBLE_RESULT Appli_Light_Lightness_Last_Status(MOBLEUINT8 const *pLightnessLast_status,
+ MOBLEUINT32 pLength,
+ MOBLEUINT16 dstPeer,
+ MOBLEUINT8 elementIndex)
+{
+#if ( CFG_DEBUG_TRACE != 0 )
+ MOBLEUINT32 i;
+ MOBLEUINT16 value;
+#endif
+
+ TRACE_M(TF_LIGHT,"Light_Lightness_Last_Status callback received for element %d \r\n", elementIndex);
+ TRACE_M(TF_SERIAL_CTRL,"#8256!\r\n");
+
+#if ( CFG_DEBUG_TRACE != 0 )
+ for(i = 0; i < pLength; i++)
+ {
+ if(i == 0)
+ {
+ value = pLightnessLast_status[i];
+ }
+ else if(i == 1)
+ {
+ TRACE_M(TF_LIGHT,"Lightness Last: 0x%x (%d)\r\n",
+ value | pLightnessLast_status[i] << 8,
+ value | pLightnessLast_status[i] << 8);
+ }
+ }
+#endif
+
+ return MOBLE_RESULT_SUCCESS;
+}
+
+
/******************************************************************************/
#ifdef ENABLE_LIGHT_MODEL_SERVER_LIGHTNESS_SETUP
/******************************************************************************/
@@ -369,16 +452,22 @@ MOBLE_RESULT Appli_Light_Lightness_Default_Status(MOBLEUINT8 const *pLightnessDe
* when Light Lightness Range Set message is received
* @param pLight_LightnessRangeParam: Pointer to the parameters received for message
* @param OptionalValid: Flag to inform about the validity of optional parameters
+* @param dstPeer: destination send by peer for this node. It can be a
+* unicast or group address
+* @param elementIndex: index of the element received from peer for this node which
+* is elementNumber-1
* @retval MOBLE_RESULT
*/
MOBLE_RESULT Appli_Light_Lightness_Range_Set(Light_LightnessRangeParam_t* pLight_LightnessRangeParam,
- MOBLEUINT8 OptionalValid)
+ MOBLEUINT8 OptionalValid, MOBLEUINT16 dstPeer,
+ MOBLEUINT8 elementIndex)
{
- ApplilightnessSet.StatusCode = pLight_LightnessRangeParam->StatusCode;
- ApplilightnessSet.RangeMin = pLight_LightnessRangeParam->MinRangeStatus;
- ApplilightnessSet.RangeMax = pLight_LightnessRangeParam->MaxRangeStatus;
+ ApplilightnessSet[elementIndex].StatusCode = pLight_LightnessRangeParam->StatusCode;
+ ApplilightnessSet[elementIndex].RangeMin = pLight_LightnessRangeParam->MinRangeStatus;
+ ApplilightnessSet[elementIndex].RangeMax = pLight_LightnessRangeParam->MaxRangeStatus;
- TRACE_M(TF_SERIAL_CTRL,"#825B! \n\r");
+ TRACE_M(TF_LIGHT,"Light_Lightness_Range_Set callback received for element %d \r\n", elementIndex);
+ TRACE_M(TF_SERIAL_CTRL,"#825B!\r\n");
return MOBLE_RESULT_SUCCESS;
}
@@ -392,45 +481,56 @@ MOBLE_RESULT Appli_Light_Lightness_Range_Set(Light_LightnessRangeParam_t* pLight
* when Light Lightness range ststus message is received
* @param pLightnessRange_status: Pointer to the parameters received for message
* @param pLength: length of data
+* @param dstPeer: destination send by peer for this node. It can be a
+* unicast or group address
+* @param elementIndex: index of the element received from peer for this node which
+* is elementNumber-1
* @retval MOBLE_RESULT
*/
-MOBLE_RESULT Appli_Light_Lightness_Range_Status(MOBLEUINT8 const *pLightnessRange_status, MOBLEUINT32 pLength)
+MOBLE_RESULT Appli_Light_Lightness_Range_Status(MOBLEUINT8 const *pLightnessRange_status, MOBLEUINT32 pLength
+ , MOBLEUINT16 dstPeer,
+ MOBLEUINT8 elementIndex)
{
-#ifdef CFG_DEBUG_TRACE
+#if ( CFG_DEBUG_TRACE != 0 )
MOBLEUINT32 i;
- MOBLEUINT16 value = 0;
+ MOBLEUINT16 value;
#endif
- TRACE_M(TF_LIGHT,"Light_Lightness_Range_Status callback received \r\n");
-
- TRACE_M(TF_SERIAL_CTRL,"#8258! \n\r");
-#ifdef CFG_DEBUG_TRACE
+ TRACE_M(TF_LIGHT,"Light_Lightness_Range_Status callback received for element %d \r\n", elementIndex);
+ TRACE_M(TF_SERIAL_CTRL,"#8258!\r\n");
+
+#if ( CFG_DEBUG_TRACE != 0 )
for(i = 0; i < pLength; i++)
{
if(i == 0)
{
- TRACE_M(TF_LIGHT,"Status Code: %d \r\n",
- value << 8 | pLightnessRange_status[i]);
+ TRACE_M(TF_LIGHT,"Status Code: 0x%x (%d)\r\n",
+ pLightnessRange_status[i],
+ pLightnessRange_status[i]);
}
else if((i == 1) || (i == 3))
{
value = pLightnessRange_status[i];
}
- else if(i == 1)
+ else if(i == 2)
{
- TRACE_M(TF_LIGHT,"Range Min: %d \r\n",
- value << 8 | pLightnessRange_status[i]);
+ TRACE_M(TF_LIGHT,"Range Min: 0x%x (%d)\r\n",
+ value | pLightnessRange_status[i] << 8,
+ value | pLightnessRange_status[i] << 8);
}
- else if(i == 3)
+ else if(i == 4)
{
- TRACE_M(TF_LIGHT,"Range Max: %d \r\n",
- value << 8 | pLightnessRange_status[i]);
+ TRACE_M(TF_LIGHT,"Range Max: 0x%x (%d)\r\n",
+ value | pLightnessRange_status[i] << 8,
+ value | pLightnessRange_status[i] << 8);
}
}
#endif
+
return MOBLE_RESULT_SUCCESS;
}
+
/******************************************************************************/
#ifdef ENABLE_LIGHT_MODEL_SERVER_CTL
/******************************************************************************/
@@ -440,22 +540,34 @@ MOBLE_RESULT Appli_Light_Lightness_Range_Status(MOBLEUINT8 const *pLightnessRang
* when Light Ctl Set message is received
* @param pLight_CtlParam: Pointer to the parameters received for message
* @param OptionalValid: Flag to inform about the validity of optional parameters
+* @param dstPeer: destination send by peer for this node. It can be a
+* unicast or group address
+* @param elementIndex: index of the element received from peer for this node which
+* is elementNumber-1
* @retval MOBLE_RESULT
*/
MOBLE_RESULT Appli_Light_Ctl_Set(Light_CtlStatus_t* pLight_CtlParam,
- MOBLEUINT8 OptionalValid)
+ MOBLEUINT8 OptionalValid, MOBLEUINT16 dstPeer,
+ MOBLEUINT8 elementIndex)
{
float colourRatio;
float brightRatio;
- TRACE_M(TF_SERIAL_CTRL,"#825E! \n\r");
+ TRACE_M(TF_LIGHT,"Appli_Light_Ctl_Set callback received for element %d \r\n", elementIndex);
+ TRACE_M(TF_SERIAL_CTRL,"#825E!\r\n");
- AppliCtlSet.PresentLightness16 = pLight_CtlParam->PresentCtlLightness16;
- AppliCtlSet.PresentTemperature16 = pLight_CtlParam->PresentCtlTemperature16;
- AppliCtlSet.PresentCtlDelta16 = pLight_CtlParam->PresentCtlDelta16;
- colourRatio = Ratio_CalculateValue(AppliCtlSet.PresentTemperature16 ,MAX_CTL_TEMP_RANGE ,MIN_CTL_TEMP_RANGE);
+ AppliCtlSet[elementIndex].PresentLightness16 = pLight_CtlParam->PresentCtlLightness16;
+ AppliCtlSet[elementIndex].PresentTemperature16 = pLight_CtlParam->PresentCtlTemperature16;
+ AppliCtlSet[elementIndex].PresentCtlDelta16 = pLight_CtlParam->PresentCtlDelta16;
- brightRatio = Ratio_CalculateValue(AppliCtlSet.PresentLightness16 ,0XFFFF ,0);
+ /* Save target parameters if transition is available */
+ AppliCtlSet[elementIndex].TargetLightness16 = pLight_CtlParam->TargetCtlLightness16;
+ AppliCtlSet[elementIndex].TargetTemperature16 = pLight_CtlParam->TargetCtlTemperature16;
+ AppliCtlSet[elementIndex].TargetCtlDelta16 = pLight_CtlParam->TargetCtlDeltaUv16;
+
+ colourRatio = Ratio_CalculateValue(AppliCtlSet[elementIndex].PresentTemperature16 ,MAX_CTL_TEMP_RANGE ,MIN_CTL_TEMP_RANGE);
+
+ brightRatio = Ratio_CalculateValue(AppliCtlSet[elementIndex].PresentLightness16 ,0XFFFF ,0);
Appli_LightPwmValue.PwmCoolValue = PWM_CoolValue(colourRatio , brightRatio);
Appli_LightPwmValue.PwmWarmValue = PWM_WarmValue(colourRatio , brightRatio);
@@ -464,15 +576,8 @@ MOBLE_RESULT Appli_Light_Ctl_Set(Light_CtlStatus_t* pLight_CtlParam,
Light_UpdateLedValue(LOAD_STATE , Appli_LightPwmValue);
- TRACE_M(TF_SERIAL_CTRL,"#825E%04hx%04hx%04hx!\n\r",
- AppliCtlSet.PresentLightness16,
- AppliCtlSet.PresentTemperature16,
- AppliCtlSet.PresentCtlDelta16);
-
/* set the flag value for NVM store */
- RestoreFlag = LIGHT_CTL_NVM_FLAG;
-
- AppliNvm_SaveMessageParam();
+ NvmStatePowerFlag_Set(LIGHT_CTL_NVM_FLAG, elementIndex);
return MOBLE_RESULT_SUCCESS;
}
@@ -488,18 +593,18 @@ MOBLE_RESULT Appli_Light_Ctl_Set(Light_CtlStatus_t* pLight_CtlParam,
* @param pLength: length of data
* @retval MOBLE_RESULT
*/
-MOBLE_RESULT Appli_Light_Ctl_Status(MOBLEUINT8 const *pLightCtl_status,
- MOBLEUINT32 pLength)
+MOBLE_RESULT Appli_Light_Ctl_Status(MOBLEUINT8 const *pLightCtl_status, MOBLEUINT32 pLength, MOBLEUINT16 dstPeer,
+ MOBLEUINT8 elementIndex)
{
-#ifdef CFG_DEBUG_TRACE
+#if ( CFG_DEBUG_TRACE != 0 )
MOBLEUINT32 i;
MOBLEUINT16 value = 0;
#endif
- TRACE_M(TF_LIGHT,"Light_Ctl_Status callback received \r\n");
-
- TRACE_M(TF_SERIAL_CTRL,"#8260! \n\r");
+
+ TRACE_M(TF_LIGHT,"Light_Ctl_Status callback received for element %d \r\n", elementIndex);
+ TRACE_M(TF_SERIAL_CTRL,"#8260!\r\n");
-#ifdef CFG_DEBUG_TRACE
+#if ( CFG_DEBUG_TRACE != 0 )
for(i = 0; i < pLength; i++)
{
if((i == 0) || (i == 2) || (i == 4) || (i == 6))
@@ -508,34 +613,41 @@ MOBLE_RESULT Appli_Light_Ctl_Status(MOBLEUINT8 const *pLightCtl_status,
}
else if(i == 1)
{
- TRACE_M(TF_LIGHT,"Present CTL Lightness: %d \r\n",
- value << 8 | pLightCtl_status[i]);
+ TRACE_M(TF_LIGHT,"Present CTL Lightness: 0x%x (%d)\r\n",
+ value | pLightCtl_status[i] << 8,
+ value | pLightCtl_status[i] << 8);
}
else if(i == 3)
{
- TRACE_M(TF_LIGHT,"Present CTL Temperature: %d \r\n",
- value << 8 | pLightCtl_status[i]);
+ TRACE_M(TF_LIGHT,"Present CTL Temperature: 0x%x (%d)\r\n",
+ value | pLightCtl_status[i] << 8,
+ value | pLightCtl_status[i] << 8);
}
else if(i == 5)
{
- TRACE_M(TF_LIGHT,"Target CTL Lightness: %d \r\n",
- value << 8 | pLightCtl_status[i]);
+ TRACE_M(TF_LIGHT,"Target CTL Lightness: 0x%x (%d)\r\n",
+ value | pLightCtl_status[i] << 8,
+ value | pLightCtl_status[i] << 8);
}
else if(i == 7)
{
- TRACE_M(TF_LIGHT,"Target CTL Temperature: %d \r\n",
- value << 8 | pLightCtl_status[i]);
+ TRACE_M(TF_LIGHT,"Target CTL Temperature: 0x%x (%d)\r\n",
+ value | pLightCtl_status[i] << 8,
+ value | pLightCtl_status[i] << 8);
}
else if(i == 8)
{
- TRACE_M(TF_LIGHT,"Remaining Time: %d \r\n",
+ TRACE_M(TF_LIGHT,"Remaining Time:0x%x (%d)\r\n",
+ pLightCtl_status[i],
pLightCtl_status[i]);
}
}
#endif
+
return MOBLE_RESULT_SUCCESS;
}
+
/******************************************************************************/
#ifdef ENABLE_LIGHT_MODEL_SERVER_CTL_TEMPERATURE
/******************************************************************************/
@@ -545,21 +657,32 @@ MOBLE_RESULT Appli_Light_Ctl_Status(MOBLEUINT8 const *pLightCtl_status,
* when Light Ctl Temperature Set message is received
* @param pLight_CtltempParam: Pointer to the parameters received for message
* @param OptionalValid: Flag to inform about the validity of optional parameters
+* @param dstPeer: destination send by peer for this node. It can be a
+* unicast or group address
+* @param elementIndex: index of the element received from peer for this node which
+* is elementNumber-1
* @retval MOBLE_RESULT
*/
MOBLE_RESULT Appli_Light_CtlTemperature_Set(Light_CtlStatus_t* pLight_CtltempParam,
- MOBLEUINT8 OptionalValid)
+ MOBLEUINT8 OptionalValid, MOBLEUINT16 dstPeer,
+ MOBLEUINT8 elementIndex)
{
float colourRatio;
float brightRatio;
- TRACE_M(TF_SERIAL_CTRL,"#8264!\n\r");
- AppliCtlSet.PresentTemperature16 = pLight_CtltempParam->PresentCtlTemperature16;
- AppliCtlSet.PresentCtlDelta16 = pLight_CtltempParam->PresentCtlDelta16;
+ TRACE_M(TF_LIGHT,"Appli_Light_CtlTemperature_Set callback received for element %d \r\n", elementIndex);
+ TRACE_M(TF_SERIAL_CTRL,"#8264!\r\n");
+
+ AppliCtlSet[elementIndex].PresentTemperature16 = pLight_CtltempParam->PresentCtlTemperature16;
+ AppliCtlSet[elementIndex].PresentCtlDelta16 = pLight_CtltempParam->PresentCtlDelta16;
- colourRatio = Ratio_CalculateValue(AppliCtlSet.PresentTemperature16 ,MAX_CTL_TEMP_RANGE ,MIN_CTL_TEMP_RANGE);
+ /* Made a copy of target in case of transition values change */
+ AppliCtlSet[elementIndex].TargetTemperature16 = pLight_CtltempParam->TargetCtlTemperature16;
+ AppliCtlSet[elementIndex].TargetCtlDelta16 = pLight_CtltempParam->TargetCtlDeltaUv16;
- brightRatio = Ratio_CalculateValue(AppliCtlSet.PresentLightness16 ,0XFFFF ,0);
+ colourRatio = Ratio_CalculateValue(AppliCtlSet[elementIndex].PresentTemperature16 ,MAX_CTL_TEMP_RANGE ,MIN_CTL_TEMP_RANGE);
+
+ brightRatio = Ratio_CalculateValue(AppliCtlSet[elementIndex].PresentLightness16 ,0XFFFF ,0);
Appli_LightPwmValue.PwmCoolValue = PWM_CoolValue(colourRatio , brightRatio);
Appli_LightPwmValue.PwmWarmValue = PWM_WarmValue(colourRatio , brightRatio);
@@ -568,9 +691,7 @@ MOBLE_RESULT Appli_Light_CtlTemperature_Set(Light_CtlStatus_t* pLight_CtltempPar
Light_UpdateLedValue(LOAD_STATE , Appli_LightPwmValue);
/* set the flag value for NVM store */
- RestoreFlag = LIGHT_CTL_NVM_FLAG;
-
- AppliNvm_SaveMessageParam();
+ NvmStatePowerFlag_Set(LIGHT_CTL_NVM_FLAG, elementIndex);
return MOBLE_RESULT_SUCCESS;
}
@@ -584,19 +705,25 @@ MOBLE_RESULT Appli_Light_CtlTemperature_Set(Light_CtlStatus_t* pLight_CtltempPar
* when Light CTL temperature status message is received
* @param pLightCtlTemp_status: Pointer to the parameters received for message
* @param pLength: length of data
+* @param dstPeer: destination send by peer for this node. It can be a
+* unicast or group address
+* @param elementIndex: index of the element received from peer for this node which
+* is elementNumber-1
* @retval MOBLE_RESULT
*/
-MOBLE_RESULT Appli_Light_CtlTemperature_Status(MOBLEUINT8 const *pLightCtlTemp_status, MOBLEUINT32 pLength)
+MOBLE_RESULT Appli_Light_CtlTemperature_Status(MOBLEUINT8 const *pLightCtlTemp_status, MOBLEUINT32 pLength
+ , MOBLEUINT16 dstPeer,
+ MOBLEUINT8 elementIndex)
{
-#ifdef CFG_DEBUG_TRACE
+#if ( CFG_DEBUG_TRACE != 0 )
MOBLEUINT32 i;
MOBLEUINT16 value = 0;
#endif
- TRACE_M(TF_LIGHT,"Light_CtlTemperature_Status callback received \r\n");
- TRACE_M(TF_SERIAL_CTRL,"#8266! \n\r");
+ TRACE_M(TF_LIGHT,"Light_CtlTemperature_Status callback received for element %d \r\n", elementIndex);
+ TRACE_M(TF_SERIAL_CTRL,"#8266!\r\n");
-#ifdef CFG_DEBUG_TRACE
+#if ( CFG_DEBUG_TRACE != 0 )
for(i = 0; i < pLength; i++)
{
if((i == 0) || (i == 2) || (i == 4) || (i == 6))
@@ -605,35 +732,42 @@ MOBLE_RESULT Appli_Light_CtlTemperature_Status(MOBLEUINT8 const *pLightCtlTemp_s
}
else if(i == 1)
{
- TRACE_M(TF_LIGHT,"Present CTL Temperature: %d \r\n",
- value << 8 | pLightCtlTemp_status[i]);
+ TRACE_M(TF_LIGHT,"Present CTL Temperature: 0x%x (%d)\r\n",
+ value | pLightCtlTemp_status[i] << 8,
+ value | pLightCtlTemp_status[i] << 8);
}
else if(i == 3)
{
- TRACE_M(TF_LIGHT,"Present CTL Delta UV: %d \r\n",
- value << 8 | pLightCtlTemp_status[i]);
+ TRACE_M(TF_LIGHT,"Present CTL Delta UV: 0x%x (%d)\r\n",
+ value | pLightCtlTemp_status[i] << 8,
+ value | pLightCtlTemp_status[i] << 8);
}
else if(i == 5)
{
- TRACE_M(TF_LIGHT,"Target CTL Temperature: %d \r\n",
- value << 8 | pLightCtlTemp_status[i]);
+ TRACE_M(TF_LIGHT,"Target CTL Temperature: 0x%x (%d)\r\n",
+ value | pLightCtlTemp_status[i] << 8,
+ value | pLightCtlTemp_status[i] << 8);
}
else if(i == 7)
{
- TRACE_M(TF_LIGHT,"Target CTL Delta UV: %d \r\n",
- value << 8 | pLightCtlTemp_status[i]);
+ TRACE_M(TF_LIGHT,"Target CTL Delta UV: 0x%x (%d)\r\n",
+ value | pLightCtlTemp_status[i] << 8,
+ value | pLightCtlTemp_status[i] << 8);
}
else if(i == 8)
{
- TRACE_M(TF_LIGHT,"Remaining Time: %d \r\n",
+ TRACE_M(TF_LIGHT,"Remaining Time: 0x%x (%d)\r\n",
+ pLightCtlTemp_status[i],
pLightCtlTemp_status[i]);
}
}
#endif
+
return MOBLE_RESULT_SUCCESS;
}
+
/******************************************************************************/
#ifdef ENABLE_LIGHT_MODEL_SERVER_CTL_SETUP
/******************************************************************************/
@@ -643,16 +777,22 @@ MOBLE_RESULT Appli_Light_CtlTemperature_Status(MOBLEUINT8 const *pLightCtlTemp_s
* when Light Ctl Temperature range Set message is received
* @param pLight_CtlTempRangeParam: Pointer to the parameters received for message
* @param OptionalValid: Flag to inform about the validity of optional parameters
+* @param dstPeer: destination send by peer for this node. It can be a
+* unicast or group address
+* @param elementIndex: index of the element received from peer for this node which
+* is elementNumber-1
* @retval MOBLE_RESULT
*/
MOBLE_RESULT Appli_Light_CtlTemperature_Range_Set(Light_CtlTemperatureRangeParam_t* pLight_CtlTempRangeParam,
- MOBLEUINT8 OptionalValid)
+ MOBLEUINT8 OptionalValid, MOBLEUINT16 dstPeer,
+ MOBLEUINT8 elementIndex)
{
- AppliCtlTemperatureRangeSet.RangeMin = pLight_CtlTempRangeParam->MinRangeStatus;
- AppliCtlTemperatureRangeSet.RangeMax = pLight_CtlTempRangeParam->MaxRangeStatus;
- AppliCtlTemperatureRangeSet.StatusCode = pLight_CtlTempRangeParam->StatusCode;
+ AppliCtlTemperatureRangeSet[elementIndex].RangeMin = pLight_CtlTempRangeParam->MinRangeStatus;
+ AppliCtlTemperatureRangeSet[elementIndex].RangeMax = pLight_CtlTempRangeParam->MaxRangeStatus;
+ AppliCtlTemperatureRangeSet[elementIndex].StatusCode = pLight_CtlTempRangeParam->StatusCode;
- TRACE_M(TF_SERIAL_CTRL,"#826B!\n\r");
+ TRACE_M(TF_LIGHT,"Light_CtlTemperature_Range_Set callback received for element %d \r\n", elementIndex);
+ TRACE_M(TF_SERIAL_CTRL,"#826B!\r\n");
return MOBLE_RESULT_SUCCESS;
}
@@ -667,28 +807,34 @@ MOBLE_RESULT Appli_Light_CtlTemperature_Range_Set(Light_CtlTemperatureRangeParam
* when Light CTL temperature range status message is received
* @param pCtlTempRange_status: Pointer to the parameters received for message
* @param pLength: length of data
+* @param dstPeer: destination send by peer for this node. It can be a
+* unicast or group address
+* @param elementIndex: index of the element received from peer for this node which
+* is elementNumber-1
* @retval MOBLE_RESULT
*/
-MOBLE_RESULT Appli_Light_CtlTemperature_Range_Status(MOBLEUINT8 const *pCtlTempRange_status, MOBLEUINT32 pLength)
+MOBLE_RESULT Appli_Light_CtlTemperature_Range_Status(MOBLEUINT8 const *pCtlTempRange_status, MOBLEUINT32 pLength, MOBLEUINT16 dstPeer,
+ MOBLEUINT8 elementIndex)
{
-#ifdef CFG_DEBUG_TRACE
+#if ( CFG_DEBUG_TRACE != 0 )
MOBLEUINT32 i;
- MOBLEUINT16 value = 0;
+ MOBLEUINT16 value;
#endif
- TRACE_M(TF_LIGHT,"Light_CtlTemperature_Range_Status callback received \r\n");
- TRACE_M(TF_SERIAL_CTRL,"#8263! \n\r");
+ TRACE_M(TF_LIGHT,"Light_CtlTemperature_Range_Status callback received for element %d \r\n", elementIndex);
+ TRACE_M(TF_SERIAL_CTRL,"#8263!\r\n");
- RestoreFlag = LIGHT_CTL_NVM_FLAG;
+ RestoreFlag = LIGHT_CTL_NVM_FLAG;
AppliNvm_SaveMessageParam();
-#ifdef CFG_DEBUG_TRACE
+#if ( CFG_DEBUG_TRACE != 0 )
for(i = 0; i < pLength; i++)
{
if(i == 0)
{
- TRACE_M(TF_LIGHT,"Status Code: %d \r\n",
+ TRACE_M(TF_LIGHT,"Status Code: 0x%x (%d)\r\n",
+ pCtlTempRange_status[i],
pCtlTempRange_status[i]);
}
else if((i == 1) || (i == 3))
@@ -697,19 +843,23 @@ MOBLE_RESULT Appli_Light_CtlTemperature_Range_Status(MOBLEUINT8 const *pCtlTempR
}
else if(i == 2)
{
- TRACE_M(TF_LIGHT,"Range Min: %d \r\n",
- value << 8 | pCtlTempRange_status[i]);
+ TRACE_M(TF_LIGHT,"Range Min: 0x%x (%d)\r\n",
+ value | pCtlTempRange_status[i] << 8,
+ value | pCtlTempRange_status[i] << 8 );
}
else if(i == 4)
{
- TRACE_M(TF_LIGHT,"Range Max: %d \r\n",
- value << 8 | pCtlTempRange_status[i]);
+ TRACE_M(TF_LIGHT,"Range Max: 0x%x (%d)\r\n",
+ value | pCtlTempRange_status[i] << 8,
+ value | pCtlTempRange_status[i] << 8 );
}
}
#endif
+
return MOBLE_RESULT_SUCCESS;
}
+
/******************************************************************************/
#ifdef ENABLE_LIGHT_MODEL_SERVER_CTL_SETUP
/******************************************************************************/
@@ -719,16 +869,22 @@ MOBLE_RESULT Appli_Light_CtlTemperature_Range_Status(MOBLEUINT8 const *pCtlTempR
* when Light Ctl Default Set message is received
* @param pLight_CtlDefaultParam: Pointer to the parameters received for message
* @param OptionalValid: Flag to inform about the validity of optional parameters
+* @param dstPeer: destination send by peer for this node. It can be a
+* unicast or group address
+* @param elementIndex: index of the element received from peer for this node which
+* is elementNumber-1
* @retval MOBLE_RESULT
*/
MOBLE_RESULT Appli_Light_CtlDefault_Set(Light_CtlDefaultParam_t* pLight_CtlDefaultParam,
- MOBLEUINT8 OptionalValid)
+ MOBLEUINT8 OptionalValid, MOBLEUINT16 dstPeer,
+ MOBLEUINT8 elementIndex)
{
- AppliCtlDefaultSet.CtlDefaultLightness16 = pLight_CtlDefaultParam->CtlDefaultLightness16;
- AppliCtlDefaultSet.CtlDefaultTemperature16 = pLight_CtlDefaultParam->CtlDefaultTemperature16;
- AppliCtlDefaultSet.CtlDefaultDeltaUv = pLight_CtlDefaultParam->CtlDefaultDeltaUv;
+ AppliCtlDefaultSet[elementIndex].CtlDefaultLightness16 = pLight_CtlDefaultParam->CtlDefaultLightness16;
+ AppliCtlDefaultSet[elementIndex].CtlDefaultTemperature16 = pLight_CtlDefaultParam->CtlDefaultTemperature16;
+ AppliCtlDefaultSet[elementIndex].CtlDefaultDeltaUv = pLight_CtlDefaultParam->CtlDefaultDeltaUv;
- TRACE_M(TF_SERIAL_CTRL,"#8269!\n\r");
+ TRACE_M(TF_LIGHT,"Light_CtlDefault_Set callback received for element %d \r\n", elementIndex);
+ TRACE_M(TF_SERIAL_CTRL,"#8269!\r\n");
return MOBLE_RESULT_SUCCESS;
}
@@ -742,19 +898,24 @@ MOBLE_RESULT Appli_Light_CtlDefault_Set(Light_CtlDefaultParam_t* pLight_CtlDefau
* when Light CTL Default status message is received
* @param pCtlDefault_status: Pointer to the parameters received for message
* @param pLength: length of data
+* @param dstPeer: destination send by peer for this node. It can be a
+* unicast or group address
+* @param elementIndex: index of the element received from peer for this node which
+* is elementNumber-1
* @retval MOBLE_RESULT
*/
-MOBLE_RESULT Appli_Light_CtlDefault_Status(MOBLEUINT8 const *pCtlDefault_status, MOBLEUINT32 pLength)
+MOBLE_RESULT Appli_Light_CtlDefault_Status(MOBLEUINT8 const *pCtlDefault_status, MOBLEUINT32 pLength, MOBLEUINT16 dstPeer,
+ MOBLEUINT8 elementIndex)
{
-#ifdef CFG_DEBUG_TRACE
+#if ( CFG_DEBUG_TRACE != 0 )
MOBLEUINT32 i;
MOBLEUINT16 value = 0;
#endif
- TRACE_M(TF_LIGHT,"Light_Ctl_DefaultStatus callback received \r\n");
- TRACE_M(TF_SERIAL_CTRL,"#8268! \n\r");
+ TRACE_M(TF_LIGHT,"Light_Ctl_DefaultStatus callback received for element %d \r\n", elementIndex);
+ TRACE_M(TF_SERIAL_CTRL,"#8268!\r\n");
-#ifdef CFG_DEBUG_TRACE
+#if ( CFG_DEBUG_TRACE != 0 )
for(i = 0; i < pLength; i++)
{
if((i == 0) || (i == 2) || (i == 4))
@@ -763,24 +924,29 @@ MOBLE_RESULT Appli_Light_CtlDefault_Status(MOBLEUINT8 const *pCtlDefault_status,
}
else if(i == 1)
{
- TRACE_M(TF_LIGHT,"Lightness: %d \r\n",
- value << 8 | pCtlDefault_status[i]);
+ TRACE_M(TF_LIGHT,"Lightness: 0x%x (%d)\n\r",
+ value | pCtlDefault_status[i] << 8,
+ value | pCtlDefault_status[i] << 8);
}
else if(i == 3)
{
- TRACE_M(TF_LIGHT,"Temperature: %d \r\n",
- value << 8 | pCtlDefault_status[i]);
+ TRACE_M(TF_LIGHT,"Temperature: 0x%x (%d)\n\r",
+ value | pCtlDefault_status[i] << 8,
+ value | pCtlDefault_status[i] << 8);
}
else if(i == 5)
{
- TRACE_M(TF_LIGHT,"Delta UV: %d \r\n",
- value << 8 | pCtlDefault_status[i]);
+ TRACE_M(TF_LIGHT,"Delta UV: 0x%x (%d)\n\r",
+ value | pCtlDefault_status[i] << 8,
+ value | pCtlDefault_status[i] << 8);
}
}
#endif
+
return MOBLE_RESULT_SUCCESS;
}
+
/******************************************************************************/
#ifdef ENABLE_LIGHT_MODEL_SERVER_HSL
/******************************************************************************/
@@ -790,32 +956,41 @@ MOBLE_RESULT Appli_Light_CtlDefault_Status(MOBLEUINT8 const *pCtlDefault_status,
* when Light Hsl Set message is received
* @param pLight_HslParam: Pointer to the parameters received for message
* @param OptionalValid: Flag to inform about the validity of optional parameters
+* @param dstPeer: destination send by peer for this node. It can be a
+* unicast or group address
+* @param elementIndex: index of the element received from peer for this node which
+* is elementNumber-1
* @retval MOBLE_RESULT
*/
MOBLE_RESULT Appli_Light_Hsl_Set(Light_HslStatus_t* pLight_HslParam,
- MOBLEUINT8 OptionalValid)
+ MOBLEUINT8 OptionalValid, MOBLEUINT16 dstPeer,
+ MOBLEUINT8 elementIndex)
{
- TRACE_M(TF_SERIAL_CTRL,"#8276!\n\r");
+ TRACE_M(TF_LIGHT,"Appli_Light_Hsl_Set callback received for element %d \r\n", elementIndex);
+ TRACE_M(TF_SERIAL_CTRL,"#8276!\r\n");
- AppliHslSet.HslLightness16 = pLight_HslParam->PresentHslLightness16;
- AppliHslSet.HslHueLightness16 = pLight_HslParam->PresentHslHueLightness16;
- AppliHslSet.HslSaturation16 = pLight_HslParam->PresentHslSaturation16;
+ AppliHslSet[elementIndex].HslLightness16 = pLight_HslParam->PresentHslLightness16;
+ AppliHslSet[elementIndex].HslHueLightness16 = pLight_HslParam->PresentHslHueLightness16;
+ AppliHslSet[elementIndex].HslSaturation16 = pLight_HslParam->PresentHslSaturation16;
+ /* Save target parameters if transition is available */
+ AppliHslSet[elementIndex].TargetHslLightness16 = pLight_HslParam->TargetHslLightness16;
+ AppliHslSet[elementIndex].TargetHslHueLightness16 = pLight_HslParam->TargetHslHueLightness16;
+ AppliHslSet[elementIndex].TargetHslSaturation16 = pLight_HslParam->TargetHslSaturation16;
+
/* Function to convert HSL values in RGB values */
- HSL2RGB_Conversion();
+ HSL2RGB_Conversion(elementIndex);
- Appli_LightPwmValue.PwmRedValue = PwmValueMapping(Appli_RGBParam.Red_Value ,0xFFFF ,0x00);
- Appli_LightPwmValue.PwmGreenValue = PwmValueMapping(Appli_RGBParam.Green_Value ,0xFFFF ,0x00);
- Appli_LightPwmValue.PwmBlueValue = PwmValueMapping(Appli_RGBParam.Blue_Value ,0xFFFF ,0x00);
+ Appli_LightPwmValue.PwmRedValue = PwmValueMapping(Appli_RGBParam[elementIndex].Red_Value ,0xFFFF ,0x00);
+ Appli_LightPwmValue.PwmGreenValue = PwmValueMapping(Appli_RGBParam[elementIndex].Green_Value ,0xFFFF ,0x00);
+ Appli_LightPwmValue.PwmBlueValue = PwmValueMapping(Appli_RGBParam[elementIndex].Blue_Value ,0xFFFF ,0x00);
/* when HSL is set, make CTL pwm will bw zero */
Ctl_LedOffState();
Light_UpdateLedValue(LOAD_STATE , Appli_LightPwmValue);
/* set the flag value for NVM store */
- RestoreFlag = LIGHT_HSL_NVM_FLAG;
-
- AppliNvm_SaveMessageParam();
+ NvmStatePowerFlag_Set(LIGHT_HSL_NVM_FLAG, elementIndex);
return MOBLE_RESULT_SUCCESS;
}
@@ -829,19 +1004,24 @@ MOBLE_RESULT Appli_Light_Hsl_Set(Light_HslStatus_t* pLight_HslParam,
* when Light HSL status message is received
* @param pHsl_status: Pointer to the parameters received for message
* @param pLength: length of data
+* @param dstPeer: destination send by peer for this node. It can be a
+* unicast or group address
+* @param elementIndex: index of the element received from peer for this node which
+* is elementNumber-1
* @retval MOBLE_RESULT
*/
-MOBLE_RESULT Appli_Light_Hsl_Status(MOBLEUINT8 const *pHsl_status, MOBLEUINT32 pLength)
+MOBLE_RESULT Appli_Light_Hsl_Status(MOBLEUINT8 const *pHsl_status, MOBLEUINT32 pLength, MOBLEUINT16 dstPeer,
+ MOBLEUINT8 elementIndex)
{
-#ifdef CFG_DEBUG_TRACE
+#if ( CFG_DEBUG_TRACE != 0 )
MOBLEUINT32 i;
MOBLEUINT16 value = 0;
#endif
- TRACE_M(TF_LIGHT,"Light_Hsl_Status callback received \r\n");
-
- TRACE_M(TF_SERIAL_CTRL,"#8278! \n\r");
+
+ TRACE_M(TF_LIGHT,"Light_Hsl_Status callback received for element %d \r\n", elementIndex);
+ TRACE_M(TF_SERIAL_CTRL,"#8278!\r\n");
-#ifdef CFG_DEBUG_TRACE
+#if ( CFG_DEBUG_TRACE != 0 )
for(i = 0; i < pLength; i++)
{
if((i == 0) || (i == 2) || (i == 4))
@@ -850,29 +1030,35 @@ MOBLE_RESULT Appli_Light_Hsl_Status(MOBLEUINT8 const *pHsl_status, MOBLEUINT32 p
}
else if(i == 1)
{
- TRACE_M(TF_LIGHT,"HSL Lightness: %d \r\n",
- value << 8 | pHsl_status[i]);
+ TRACE_M(TF_LIGHT,"HSL Lightness: 0x%x (%d)\n\r",
+ value | pHsl_status[i] << 8,
+ value | pHsl_status[i] << 8);
}
else if(i == 3)
{
- TRACE_M(TF_LIGHT,"HSL Hue: %d \r\n",
- value << 8 | pHsl_status[i]);
+ TRACE_M(TF_LIGHT,"HSL Hue: 0x%x (%d)\n\r",
+ value | pHsl_status[i] << 8,
+ value | pHsl_status[i] << 8);
}
else if(i == 5)
{
- TRACE_M(TF_LIGHT,"HSL Saturation: %d \r\n",
- value << 8 | pHsl_status[i]);
+ TRACE_M(TF_LIGHT,"HSL Saturation: 0x%x (%d)\n\r",
+ value | pHsl_status[i] << 8,
+ value | pHsl_status[i] << 8);
}
else if(i == 6)
{
- TRACE_M(TF_LIGHT,"Remaining Time: %d \r\n",
+ TRACE_M(TF_LIGHT,"Remaining Time: 0x%x (%d)\n\r",
+ pHsl_status[i],
pHsl_status[i]);
}
}
#endif
+
return MOBLE_RESULT_SUCCESS;
}
+
/******************************************************************************/
#ifdef ENABLE_LIGHT_MODEL_SERVER_HSL_HUE
/******************************************************************************/
@@ -882,28 +1068,32 @@ MOBLE_RESULT Appli_Light_Hsl_Status(MOBLEUINT8 const *pHsl_status, MOBLEUINT32 p
* when Light Hsl Hue Set message is received
* @param pLight_HslHueParam: Pointer to the parameters received for message
* @param OptionalValid: Flag to inform about the validity of optional parameters
+* @param dstPeer: destination send by peer for this node. It can be a
+* unicast or group address
+* @param elementIndex: index of the element received from peer for this node which
+* is elementNumber-1
* @retval MOBLE_RESULT
*/
MOBLE_RESULT Appli_Light_HslHue_Set(Light_HslStatus_t* pLight_HslHueParam,
- MOBLEUINT8 OptionalValid)
+ MOBLEUINT8 OptionalValid, MOBLEUINT16 dstPeer,
+ MOBLEUINT8 elementIndex)
{
- TRACE_M(TF_SERIAL_CTRL,"#826F! \n\r");
+ TRACE_M(TF_LIGHT,"Light_HslHue_Set callback received for element %d \r\n", elementIndex);
+ TRACE_M(TF_SERIAL_CTRL,"#826F!\r\n");
- AppliHslSet.HslHueLightness16 = pLight_HslHueParam->PresentHslHueLightness16;
+ AppliHslSet[elementIndex].HslHueLightness16 = pLight_HslHueParam->PresentHslHueLightness16;
- HSL2RGB_Conversion();
+ HSL2RGB_Conversion(elementIndex);
- Appli_LightPwmValue.PwmRedValue = PwmValueMapping(Appli_RGBParam.Red_Value ,0xFFFF ,0x00);
- Appli_LightPwmValue.PwmGreenValue = PwmValueMapping(Appli_RGBParam.Green_Value ,0xFFFF ,0x00);
- Appli_LightPwmValue.PwmBlueValue = PwmValueMapping(Appli_RGBParam.Blue_Value ,0xFFFF ,0x00);
+ Appli_LightPwmValue.PwmRedValue = PwmValueMapping(Appli_RGBParam[elementIndex].Red_Value ,0xFFFF ,0x00);
+ Appli_LightPwmValue.PwmGreenValue = PwmValueMapping(Appli_RGBParam[elementIndex].Green_Value ,0xFFFF ,0x00);
+ Appli_LightPwmValue.PwmBlueValue = PwmValueMapping(Appli_RGBParam[elementIndex].Blue_Value ,0xFFFF ,0x00);
Ctl_LedOffState();
Light_UpdateLedValue(LOAD_STATE , Appli_LightPwmValue);
/* set the flag value for NVM store */
- RestoreFlag = LIGHT_HSL_NVM_FLAG;
-
- AppliNvm_SaveMessageParam();
+ NvmStatePowerFlag_Set(LIGHT_HSL_NVM_FLAG, elementIndex);
return MOBLE_RESULT_SUCCESS;
@@ -918,19 +1108,24 @@ MOBLE_RESULT Appli_Light_HslHue_Set(Light_HslStatus_t* pLight_HslHueParam,
* when Light HSL HUE status message is received
* @param pHslHue_status: Pointer to the parameters received for message
* @param pLength: length of data
+* @param dstPeer: destination send by peer for this node. It can be a
+* unicast or group address
+* @param elementIndex: index of the element received from peer for this node which
+* is elementNumber-1
* @retval MOBLE_RESULT
*/
-MOBLE_RESULT Appli_Light_HslHue_Status(MOBLEUINT8 const *pHslHue_status, MOBLEUINT32 pLength)
+MOBLE_RESULT Appli_Light_HslHue_Status(MOBLEUINT8 const *pHslHue_status, MOBLEUINT32 pLength, MOBLEUINT16 dstPeer,
+ MOBLEUINT8 elementIndex)
{
-#ifdef CFG_DEBUG_TRACE
+#if ( CFG_DEBUG_TRACE != 0 )
MOBLEUINT32 i;
MOBLEUINT16 value = 0;
#endif
- TRACE_M(TF_LIGHT,"Light_HslHue_Status callback received \r\n");
- TRACE_M(TF_SERIAL_CTRL,"#8271! \n\r");
+ TRACE_M(TF_LIGHT,"Light_HslHue_Status callback received for element %d \r\n", elementIndex);
+ TRACE_M(TF_SERIAL_CTRL,"#8271!\r\n");
-#ifdef CFG_DEBUG_TRACE
+#if ( CFG_DEBUG_TRACE != 0 )
for(i = 0; i < pLength; i++)
{
if((i == 0) || (i == 2))
@@ -939,24 +1134,29 @@ MOBLE_RESULT Appli_Light_HslHue_Status(MOBLEUINT8 const *pHslHue_status, MOBLEUI
}
else if(i == 1)
{
- TRACE_M(TF_LIGHT,"Present Hue: %d \r\n",
- value << 8 | pHslHue_status[i]);
+ TRACE_M(TF_LIGHT,"Present Hue: 0x%x (%d)\n\r",
+ value | pHslHue_status[i] << 8,
+ value | pHslHue_status[i] << 8);
}
else if(i == 3)
{
- TRACE_M(TF_LIGHT,"Target Hue: %d \r\n",
- value << 8 | pHslHue_status[i]);
+ TRACE_M(TF_LIGHT,"Target Hue: 0x%x (%d)\n\r",
+ value | pHslHue_status[i] << 8,
+ value | pHslHue_status[i] << 8);
}
else if(i == 4)
{
- TRACE_M(TF_LIGHT,"Remaining Time: %d \r\n",
+ TRACE_M(TF_LIGHT,"Remaining Time: 0x%x (%d)\n\r",
+ pHslHue_status[i],
pHslHue_status[i]);
}
}
#endif
+
return MOBLE_RESULT_SUCCESS;
}
+
/******************************************************************************/
#ifdef ENABLE_LIGHT_MODEL_SERVER_HSL_SATURATION
/******************************************************************************/
@@ -966,28 +1166,32 @@ MOBLE_RESULT Appli_Light_HslHue_Status(MOBLEUINT8 const *pHslHue_status, MOBLEUI
* when Light Hsl Saturation Set message is received
* @param pLight_HslSaturationParam: Pointer to the parameters received for message
* @param OptionalValid: Flag to inform about the validity of optional parameters
+* @param dstPeer: destination send by peer for this node. It can be a
+* unicast or group address
+* @param elementIndex: index of the element received from peer for this node which
+* is elementNumber-1
* @retval MOBLE_RESULT
*/
MOBLE_RESULT Appli_Light_HslSaturation_Set(Light_HslStatus_t* pLight_HslSaturationParam,
- MOBLEUINT8 OptionalValid)
+ MOBLEUINT8 OptionalValid, MOBLEUINT16 dstPeer,
+ MOBLEUINT8 elementIndex)
{
- TRACE_M(TF_SERIAL_CTRL,"#8273! \n\r");
+ TRACE_M(TF_LIGHT,"Appli_Light_HslSaturation_Set callback received for element %d \r\n", elementIndex);
+ TRACE_M(TF_SERIAL_CTRL,"#8273!\r\n");
- AppliHslSet.HslSaturation16 = pLight_HslSaturationParam->PresentHslSaturation16;
+ AppliHslSet[elementIndex].HslSaturation16 = pLight_HslSaturationParam->PresentHslSaturation16;
- HSL2RGB_Conversion();
+ HSL2RGB_Conversion(elementIndex);
- Appli_LightPwmValue.PwmRedValue = PwmValueMapping(Appli_RGBParam.Red_Value ,0xFFFF ,0x00);
- Appli_LightPwmValue.PwmGreenValue = PwmValueMapping(Appli_RGBParam.Green_Value ,0xFFFF ,0x00);
- Appli_LightPwmValue.PwmBlueValue = PwmValueMapping(Appli_RGBParam.Blue_Value ,0xFFFF ,0x00);
+ Appli_LightPwmValue.PwmRedValue = PwmValueMapping(Appli_RGBParam[elementIndex].Red_Value ,0xFFFF ,0x00);
+ Appli_LightPwmValue.PwmGreenValue = PwmValueMapping(Appli_RGBParam[elementIndex].Green_Value ,0xFFFF ,0x00);
+ Appli_LightPwmValue.PwmBlueValue = PwmValueMapping(Appli_RGBParam[elementIndex].Blue_Value ,0xFFFF ,0x00);
Ctl_LedOffState();
Light_UpdateLedValue(LOAD_STATE , Appli_LightPwmValue);
/* set the flag value for NVM store */
- RestoreFlag = LIGHT_HSL_NVM_FLAG;
-
- AppliNvm_SaveMessageParam();
+ NvmStatePowerFlag_Set(LIGHT_HSL_NVM_FLAG, elementIndex);
return MOBLE_RESULT_SUCCESS;
}
@@ -1001,19 +1205,24 @@ MOBLE_RESULT Appli_Light_HslSaturation_Set(Light_HslStatus_t* pLight_HslSaturati
* when Light HSL Saturation status message is received
* @param pHslSaturation_status: Pointer to the parameters received for message
* @param pLength: length of data
+* @param dstPeer: destination send by peer for this node. It can be a
+* unicast or group address
+* @param elementIndex: index of the element received from peer for this node which
+* is elementNumber-1
* @retval MOBLE_RESULT
*/
-MOBLE_RESULT Appli_Light_HslSaturation_Status(MOBLEUINT8 const *pHslSaturation_status, MOBLEUINT32 pLength)
+MOBLE_RESULT Appli_Light_HslSaturation_Status(MOBLEUINT8 const *pHslSaturation_status, MOBLEUINT32 pLength, MOBLEUINT16 dstPeer,
+ MOBLEUINT8 elementIndex)
{
-#ifdef CFG_DEBUG_TRACE
+#if ( CFG_DEBUG_TRACE != 0 )
MOBLEUINT32 i;
MOBLEUINT16 value = 0;
#endif
- TRACE_M(TF_LIGHT,"Light_HslSaturation_Status callback received \r\n");
- TRACE_M(TF_SERIAL_CTRL,"#8275! \n\r");
-
-#ifdef CFG_DEBUG_TRACE
+ TRACE_M(TF_LIGHT,"Light_HslSaturation_Status callback received for element %d \r\n", elementIndex);
+ TRACE_M(TF_SERIAL_CTRL,"#8275!\r\n");
+
+#if ( CFG_DEBUG_TRACE != 0 )
for(i = 0; i < pLength; i++)
{
if((i == 0) || (i == 2))
@@ -1022,24 +1231,29 @@ MOBLE_RESULT Appli_Light_HslSaturation_Status(MOBLEUINT8 const *pHslSaturation_s
}
else if(i == 1)
{
- TRACE_M(TF_LIGHT,"Present Saturation: %d \r\n",
- value << 8 | pHslSaturation_status[i]);
+ TRACE_M(TF_LIGHT,"Present Saturation: 0x%x (%d)\n\r",
+ value | pHslSaturation_status[i] << 8,
+ value | pHslSaturation_status[i] << 8);
}
else if(i == 3)
{
- TRACE_M(TF_LIGHT,"Target Saturation: %d \r\n",
- value << 8 | pHslSaturation_status[i]);
+ TRACE_M(TF_LIGHT,"Target Saturation: 0x%x (%d)\n\r",
+ value | pHslSaturation_status[i] << 8,
+ value | pHslSaturation_status[i] << 8);
}
else if(i == 4)
{
- TRACE_M(TF_LIGHT,"Remaining Time: %d \r\n",
+ TRACE_M(TF_LIGHT,"Remaining Time: 0x%x (%d)\n\r",
+ pHslSaturation_status[i],
pHslSaturation_status[i]);
}
}
#endif
+
return MOBLE_RESULT_SUCCESS;
}
+
/******************************************************************************/
#ifdef ENABLE_LIGHT_MODEL_SERVER_HSL_SETUP
/******************************************************************************/
@@ -1049,34 +1263,38 @@ MOBLE_RESULT Appli_Light_HslSaturation_Status(MOBLEUINT8 const *pHslSaturation_s
* when Light Hsl Default Set message is received
* @param pLight_HslDefaultParam: Pointer to the parameters received for message
* @param OptionalValid: Flag to inform about the validity of optional parameters
+* @param dstPeer: destination send by peer for this node. It can be a
+* unicast or group address
+* @param elementIndex: index of the element received from peer for this node which
+* is elementNumber-1
* @retval MOBLE_RESULT
*/
MOBLE_RESULT Appli_Light_HslDefault_Set(Light_HslStatus_t* pLight_HslDefaultParam,
- MOBLEUINT8 OptionalValid)
+ MOBLEUINT8 OptionalValid, MOBLEUINT16 dstPeer,
+ MOBLEUINT8 elementIndex)
{
- TRACE_M(TF_SERIAL_CTRL,"#827F! \n\r");
+ TRACE_M(TF_LIGHT,"Appli_Light_HslDefault_Set callback received for element %d \r\n", elementIndex);
+ TRACE_M(TF_SERIAL_CTRL,"#827F!\r\n");
- Appli_HslDefaultSet.HslDefaultLightness16 = pLight_HslDefaultParam->PresentHslLightness16;
- Appli_HslDefaultSet.HslDefaultHueLightness16 = pLight_HslDefaultParam->PresentHslHueLightness16;
- Appli_HslDefaultSet.HslDefaultSaturation16 = pLight_HslDefaultParam->PresentHslSaturation16;
+ Appli_HslDefaultSet[elementIndex].HslDefaultLightness16 = pLight_HslDefaultParam->PresentHslLightness16;
+ Appli_HslDefaultSet[elementIndex].HslDefaultHueLightness16 = pLight_HslDefaultParam->PresentHslHueLightness16;
+ Appli_HslDefaultSet[elementIndex].HslDefaultSaturation16 = pLight_HslDefaultParam->PresentHslSaturation16;
- AppliHslSet.HslLightness16 = Appli_HslDefaultSet.HslDefaultLightness16;
- AppliHslSet.HslHueLightness16 = Appli_HslDefaultSet.HslDefaultHueLightness16;
- AppliHslSet.HslSaturation16 = Appli_HslDefaultSet.HslDefaultSaturation16;
+ AppliHslSet[elementIndex].HslLightness16 = Appli_HslDefaultSet[elementIndex].HslDefaultLightness16;
+ AppliHslSet[elementIndex].HslHueLightness16 = Appli_HslDefaultSet[elementIndex].HslDefaultHueLightness16;
+ AppliHslSet[elementIndex].HslSaturation16 = Appli_HslDefaultSet[elementIndex].HslDefaultSaturation16;
- HSL2RGB_Conversion();
+ HSL2RGB_Conversion(elementIndex);
- Appli_LightPwmValue.PwmRedValue = PwmValueMapping(Appli_RGBParam.Red_Value ,0xFFFF ,0x00);
- Appli_LightPwmValue.PwmGreenValue = PwmValueMapping(Appli_RGBParam.Green_Value ,0xFFFF ,0x00);
- Appli_LightPwmValue.PwmBlueValue = PwmValueMapping(Appli_RGBParam.Blue_Value ,0xFFFF ,0x00);
+ Appli_LightPwmValue.PwmRedValue = PwmValueMapping(Appli_RGBParam[elementIndex].Red_Value ,0xFFFF ,0x00);
+ Appli_LightPwmValue.PwmGreenValue = PwmValueMapping(Appli_RGBParam[elementIndex].Green_Value ,0xFFFF ,0x00);
+ Appli_LightPwmValue.PwmBlueValue = PwmValueMapping(Appli_RGBParam[elementIndex].Blue_Value ,0xFFFF ,0x00);
Ctl_LedOffState();
Light_UpdateLedValue(LOAD_STATE , Appli_LightPwmValue);
/* set the flag value for NVM store */
- RestoreFlag = LIGHT_HSL_NVM_FLAG;
-
- AppliNvm_SaveMessageParam();
+ NvmStatePowerFlag_Set(LIGHT_HSL_NVM_FLAG, elementIndex);
return MOBLE_RESULT_SUCCESS;
}
@@ -1092,17 +1310,18 @@ MOBLE_RESULT Appli_Light_HslDefault_Set(Light_HslStatus_t* pLight_HslDefaultPara
* @param pLength: length of data
* @retval MOBLE_RESULT
*/
-MOBLE_RESULT Appli_Light_HslDefault_Status(MOBLEUINT8 const *pHslDefault_status, MOBLEUINT32 pLength)
+MOBLE_RESULT Appli_Light_HslDefault_Status(MOBLEUINT8 const *pHslDefault_status, MOBLEUINT32 pLength, MOBLEUINT16 dstPeer,
+ MOBLEUINT8 elementIndex)
{
-#ifdef CFG_DEBUG_TRACE
+#if ( CFG_DEBUG_TRACE != 0 )
MOBLEUINT32 i;
MOBLEUINT16 value = 0;
#endif
- TRACE_M(TF_LIGHT,"Light_HslDefault_Status callback received \r\n");
- TRACE_M(TF_SERIAL_CTRL,"#827C! \n\r");
-
-#ifdef CFG_DEBUG_TRACE
+ TRACE_M(TF_LIGHT,"Light_HslDefault_Status callback received for element %d \r\n", elementIndex);
+ TRACE_M(TF_SERIAL_CTRL,"#827C!\r\n");
+
+#if ( CFG_DEBUG_TRACE != 0 )
for(i = 0; i < pLength; i++)
{
if((i == 0) || (i == 2) || (i == 4))
@@ -1111,24 +1330,29 @@ MOBLE_RESULT Appli_Light_HslDefault_Status(MOBLEUINT8 const *pHslDefault_status,
}
else if(i == 1)
{
- TRACE_M(TF_LIGHT,"Lightness: %d \r\n",
- value << 8 | pHslDefault_status[i]);
+ TRACE_M(TF_LIGHT,"Lightness: 0x%x (%d)\n\r",
+ value | pHslDefault_status[i] << 8,
+ value | pHslDefault_status[i] << 8);
}
else if(i == 3)
{
- TRACE_M(TF_LIGHT,"Hue: %d \r\n",
- value << 8 | pHslDefault_status[i]);
+ TRACE_M(TF_LIGHT,"Hue: 0x%x (%d)\n\r",
+ value | pHslDefault_status[i] << 8,
+ value | pHslDefault_status[i] << 8);
}
- else if(i == 4)
+ else if(i == 5)
{
- TRACE_M(TF_LIGHT,"Saturation: %d \r\n",
- value << 8 | pHslDefault_status[i]);
+ TRACE_M(TF_LIGHT,"Saturation: 0x%x (%d)\n\r",
+ value | pHslDefault_status[i] << 8,
+ value | pHslDefault_status[i] << 8);
}
}
#endif
+
return MOBLE_RESULT_SUCCESS;
}
+
/******************************************************************************/
#ifdef ENABLE_LIGHT_MODEL_SERVER_HSL_SETUP
/******************************************************************************/
@@ -1141,14 +1365,16 @@ MOBLE_RESULT Appli_Light_HslDefault_Status(MOBLEUINT8 const *pHslDefault_status,
* @retval MOBLE_RESULT
*/
MOBLE_RESULT Appli_Light_HslRange_Set(Light_HslRangeParam_t* pLight_HslRangeParam,
- MOBLEUINT8 OptionalValid)
+ MOBLEUINT8 OptionalValid, MOBLEUINT16 dstPeer,
+ MOBLEUINT8 elementIndex)
{
- TRACE_M(TF_SERIAL_CTRL,"#8281! \n\r");
+ TRACE_M(TF_LIGHT,"Light_HslRange_Set callback received for element %d \r\n", elementIndex);
+ TRACE_M(TF_SERIAL_CTRL,"#8281!\r\n");
- AppliHslRangeSet.HslHueMinRange16 = pLight_HslRangeParam->HslHueMinRange16;
- AppliHslRangeSet.HslHueMaxRange16 = pLight_HslRangeParam->HslHueMaxRange16;
- AppliHslRangeSet.HslMinSaturation16 = pLight_HslRangeParam->HslMinSaturation16;
- AppliHslRangeSet.HslMaxSaturation16 = pLight_HslRangeParam->HslMaxSaturation16;
+ AppliHslRangeSet[elementIndex].HslHueMinRange16 = pLight_HslRangeParam->HslHueMinRange16;
+ AppliHslRangeSet[elementIndex].HslHueMaxRange16 = pLight_HslRangeParam->HslHueMaxRange16;
+ AppliHslRangeSet[elementIndex].HslMinSaturation16 = pLight_HslRangeParam->HslMinSaturation16;
+ AppliHslRangeSet[elementIndex].HslMaxSaturation16 = pLight_HslRangeParam->HslMaxSaturation16;
return MOBLE_RESULT_SUCCESS;
}
@@ -1162,24 +1388,31 @@ MOBLE_RESULT Appli_Light_HslRange_Set(Light_HslRangeParam_t* pLight_HslRangePara
* when Light HSL range status message is received
* @param pHslRange_status: Pointer to the parameters received for message
* @param pLength: length of data
+* @param dstPeer: destination send by peer for this node. It can be a
+* unicast or group address
+* @param elementIndex: index of the element received from peer for this node which
+* is elementNumber-1
* @retval MOBLE_RESULT
*/
-MOBLE_RESULT Appli_Light_HslRange_Status(MOBLEUINT8 const *pHslRange_status, MOBLEUINT32 pLength)
+MOBLE_RESULT Appli_Light_HslRange_Status(MOBLEUINT8 const *pHslRange_status, MOBLEUINT32 pLength, MOBLEUINT16 dstPeer,
+ MOBLEUINT8 elementIndex)
{
-#ifdef CFG_DEBUG_TRACE
+#if ( CFG_DEBUG_TRACE != 0 )
MOBLEUINT32 i;
MOBLEUINT16 value = 0;
#endif
- TRACE_M(TF_LIGHT,"Light_HslRange_Status callback received \r\n");
- TRACE_M(TF_SERIAL_CTRL,"#827E! \n\r");
+ TRACE_M(TF_LIGHT,"Light_HslRange_Status callback received for element %d \r\n", elementIndex);
+ TRACE_M(TF_SERIAL_CTRL,"#827E!\r\n");
+
-#ifdef CFG_DEBUG_TRACE
+#if ( CFG_DEBUG_TRACE != 0 )
for(i = 0; i < pLength; i++)
{
if(i == 0)
{
- TRACE_M(TF_LIGHT,"Status Code: %d \r\n",
+ TRACE_M(TF_LIGHT,"Status Code: 0x%x (%d)\n\r",
+ pHslRange_status[i],
pHslRange_status[i]);
}
else if((i == 1) || (i == 3) || (i == 5) || (i == 7))
@@ -1188,30 +1421,36 @@ MOBLE_RESULT Appli_Light_HslRange_Status(MOBLEUINT8 const *pHslRange_status, MOB
}
else if(i == 2)
{
- TRACE_M(TF_LIGHT,"Hue Range Min: %d \r\n",
- value << 8 | pHslRange_status[i]);
+ TRACE_M(TF_LIGHT,"Hue Range Min: 0x%x (%d)\n\r",
+ value | pHslRange_status[i] << 8,
+ value | pHslRange_status[i] << 8);
}
else if(i == 4)
{
- TRACE_M(TF_LIGHT,"Hue Range Max: %d \r\n",
- value << 8 | pHslRange_status[i]);
+ TRACE_M(TF_LIGHT,"Hue Range Max: 0x%x (%d)\n\r",
+ value | pHslRange_status[i] << 8,
+ value | pHslRange_status[i] << 8);
}
else if(i == 6)
{
- TRACE_M(TF_LIGHT,"Saturation Range Min: %d \r\n",
- value << 8 | pHslRange_status[i]);
+ TRACE_M(TF_LIGHT,"Saturation Range Min: 0x%x (%d)\n\r",
+ value | pHslRange_status[i] << 8,
+ value | pHslRange_status[i] << 8);
}
else if(i == 8)
{
- TRACE_M(TF_LIGHT,"Saturation Range Max: %d \r\n",
- value << 8 | pHslRange_status[i]);
+ TRACE_M(TF_LIGHT,"Saturation Range Max: 0x%x (%d)\n\r",
+ value | pHslRange_status[i] << 8,
+ value | pHslRange_status[i] << 8);
}
}
#endif
+
return MOBLE_RESULT_SUCCESS;
}
+
/*******************************************************************************
Following Functions are used for the LIGHTING Lightness MODEL
*******************************************************************************/
@@ -1224,14 +1463,19 @@ Following Functions are used for the LIGHTING Lightness MODEL
* @brief Appli_Light_GetLightnessStatus: This function is callback for Application
* to get the application values in middleware used for transition change.
* @param lLightnessState: Pointer to the status message
+* @param dstPeer: destination send by peer for this node. It can be a
+* unicast or group address
+* @param elementIndex: index of the element received from peer for this node which
+* is elementNumber-1
* @retval MOBLE_RESULT
*/
-MOBLE_RESULT Appli_Light_GetLightnessStatus(MOBLEUINT8* lLightnessState)
+MOBLE_RESULT Appli_Light_GetLightnessStatus(MOBLEUINT8* lLightnessState, MOBLEUINT16 dstPeer,
+ MOBLEUINT8 elementIndex)
{
- *(lLightnessState) = ApplilightnessSet.PresentState16;
- *(lLightnessState+1) = ApplilightnessSet.PresentState16 >> 8;
- *(lLightnessState+2) = ApplilightnessSet.LastLightness16 ;
- *(lLightnessState+3) = ApplilightnessSet.LastLightness16 >> 8;
+ *(lLightnessState) = ApplilightnessSet[elementIndex].PresentState16;
+ *(lLightnessState+1) = ApplilightnessSet[elementIndex].PresentState16 >> 8;
+ *(lLightnessState+2) = ApplilightnessSet[elementIndex].LastLightness16 ;
+ *(lLightnessState+3) = ApplilightnessSet[elementIndex].LastLightness16 >> 8;
return MOBLE_RESULT_SUCCESS;
}
@@ -1241,17 +1485,19 @@ MOBLE_RESULT Appli_Light_GetLightnessStatus(MOBLEUINT8* lLightnessState)
* @brief Appli_Light_GetLightnessLinearStatus: This function is callback for Application
* to get the application values in middleware used for transition change.
* @param lLightnessState: Pointer to the status message
+* @param dstPeer: destination send by peer for this node. It can be a
+* unicast or group address
+* @param elementIndex: index of the element received from peer for this node which
+* is elementNumber-1
* @retval MOBLE_RESULT
*/
-MOBLE_RESULT Appli_Light_GetLightnessLinearStatus(MOBLEUINT8* lLightnessState)
+MOBLE_RESULT Appli_Light_GetLightnessLinearStatus(MOBLEUINT8* lLightnessState, MOBLEUINT16 dstPeer,
+ MOBLEUINT8 elementIndex)
{
- *(lLightnessState) = ApplilightnessLinearSet.PresentState16;
- *(lLightnessState+1) = ApplilightnessLinearSet.PresentState16 >> 8;
- *(lLightnessState+2) = ApplilightnessSet.LastLightness16 ;
- *(lLightnessState+3) = ApplilightnessSet.LastLightness16 >> 8;
- TRACE_M(TF_SERIAL_CTRL,"Get Lighness Linear Status: present: %d last: %d\n\r",
- ApplilightnessLinearSet.PresentState16,
- ApplilightnessSet.LastLightness16);
+ *(lLightnessState) = ApplilightnessLinearSet[elementIndex].PresentState16;
+ *(lLightnessState+1) = ApplilightnessLinearSet[elementIndex].PresentState16 >> 8;
+ *(lLightnessState+2) = ApplilightnessSet[elementIndex].LastLightness16 ;
+ *(lLightnessState+3) = ApplilightnessSet[elementIndex].LastLightness16 >> 8;
return MOBLE_RESULT_SUCCESS;
}
@@ -1261,14 +1507,17 @@ MOBLE_RESULT Appli_Light_GetLightnessLinearStatus(MOBLEUINT8* lLightnessState)
* @brief Appli_Light_GetLightnessDefaultStatus: This function is callback for Application
* to get the application values in middleware used for transition change.
* @param lDefaultState: Pointer to the status message
+* @param dstPeer: destination send by peer for this node. It can be a
+* unicast or group address
+* @param elementIndex: index of the element received from peer for this node which
+* is elementNumber-1
* @retval MOBLE_RESULT
*/
-MOBLE_RESULT Appli_Light_GetLightnessDefaultStatus(MOBLEUINT8* lDefaultState)
+MOBLE_RESULT Appli_Light_GetLightnessDefaultStatus(MOBLEUINT8* lDefaultState, MOBLEUINT16 dstPeer,
+ MOBLEUINT8 elementIndex)
{
- *(lDefaultState) = ApplilightnessSet.LightnessDefault;
- *(lDefaultState+1) = ApplilightnessSet.LightnessDefault >> 8;
- TRACE_M(TF_SERIAL_CTRL,"Get Lighness Default Status: %d\n\r",
- ApplilightnessSet.LightnessDefault);
+ *(lDefaultState) = ApplilightnessSet[elementIndex].LightnessDefault;
+ *(lDefaultState+1) = ApplilightnessSet[elementIndex].LightnessDefault >> 8;
return MOBLE_RESULT_SUCCESS;
}
@@ -1280,13 +1529,11 @@ MOBLE_RESULT Appli_Light_GetLightnessDefaultStatus(MOBLEUINT8* lDefaultState)
* @param lLastState: Pointer to the status message
* @retval MOBLE_RESULT
*/
-MOBLE_RESULT Appli_Light_GetLightnessLastStatus(MOBLEUINT8* lLastState)
+MOBLE_RESULT Appli_Light_GetLightnessLastStatus(MOBLEUINT8* lLastState, MOBLEUINT16 dstPeer,
+ MOBLEUINT8 elementIndex)
{
- *(lLastState) = ApplilightnessSet.LastLightness16;
- *(lLastState+1) = ApplilightnessSet.LastLightness16 >> 8;
-
- TRACE_M(TF_SERIAL_CTRL,"Get Lighness Last Status: status: %d \n\r",
- ApplilightnessSet.LastLightness16);
+ *(lLastState) = ApplilightnessSet[elementIndex].LastLightness16;
+ *(lLastState+1) = ApplilightnessSet[elementIndex].LastLightness16 >> 8;
return MOBLE_RESULT_SUCCESS;
}
@@ -1295,19 +1542,20 @@ MOBLE_RESULT Appli_Light_GetLightnessLastStatus(MOBLEUINT8* lLastState)
* @brief Appli_Light_GetLightnessRangeStatus: This function is callback for Application
* to get the application values in middleware used for transition change.
* @param lRangeState: Pointer to the status message
+* @param dstPeer: destination send by peer for this node. It can be a
+* unicast or group address
+* @param elementIndex: index of the element received from peer for this node which
+* is elementNumber-1
* @retval MOBLE_RESULT
*/
-MOBLE_RESULT Appli_Light_GetLightnessRangeStatus(MOBLEUINT8* lRangeState)
+MOBLE_RESULT Appli_Light_GetLightnessRangeStatus(MOBLEUINT8* lRangeState, MOBLEUINT16 dstPeer,
+ MOBLEUINT8 elementIndex)
{
- *(lRangeState) = ApplilightnessSet.StatusCode;
- *(lRangeState+1) = ApplilightnessSet.RangeMin;
- *(lRangeState+2) = ApplilightnessSet.RangeMin >> 8;
- *(lRangeState+3) = ApplilightnessSet.RangeMax;
- *(lRangeState+4) = ApplilightnessSet.RangeMax >> 8;
- TRACE_M(TF_SERIAL_CTRL,"Get Lighness Range Status: status: %d Min: %d Max: %d\n\r",
- ApplilightnessSet.StatusCode,
- ApplilightnessSet.RangeMin,
- ApplilightnessSet.RangeMax);
+ *(lRangeState) = ApplilightnessSet[elementIndex].StatusCode;
+ *(lRangeState+1) = ApplilightnessSet[elementIndex].RangeMin;
+ *(lRangeState+2) = ApplilightnessSet[elementIndex].RangeMin >> 8;
+ *(lRangeState+3) = ApplilightnessSet[elementIndex].RangeMax;
+ *(lRangeState+4) = ApplilightnessSet[elementIndex].RangeMax >> 8;
return MOBLE_RESULT_SUCCESS;
}
@@ -1328,40 +1576,67 @@ Following Functions are used for the LIGHTING CTL MODEL
* @brief Appli_Light_GetCtlLightStatus: This function is callback for Application
* to get the application values in middleware used for transition change.
* @param lCtlLightState: Pointer to the status message
+* @param dstPeer: destination send by peer for this node. It can be a
+* unicast or group address
+* @param elementIndex: index of the element received from peer for this node which
+* is elementNumber-1
* @retval MOBLE_RESULT
*/
-MOBLE_RESULT Appli_Light_GetCtlLightStatus(MOBLEUINT8* lCtlLightState)
+MOBLE_RESULT Appli_Light_GetCtlLightStatus(MOBLEUINT8* lCtlLightState, MOBLEUINT16 dstPeer,
+ MOBLEUINT8 elementIndex)
{
- *(lCtlLightState) = AppliCtlSet.PresentLightness16;
- *(lCtlLightState+1) = AppliCtlSet.PresentLightness16 >> 8;
- *(lCtlLightState+2) = AppliCtlSet.PresentTemperature16;
- *(lCtlLightState+3) = AppliCtlSet.PresentTemperature16 >>8;
- *(lCtlLightState+4) = AppliCtlSet.PresentCtlDelta16;
- *(lCtlLightState+5) = AppliCtlSet.PresentCtlDelta16 >>8;
- TRACE_M(TF_SERIAL_CTRL,"Get Ctl Light Status: lightness: %d temp: %d delta: %d\n\r",
- AppliCtlSet.PresentLightness16,
- AppliCtlSet.PresentTemperature16,
- AppliCtlSet.PresentCtlDelta16);
+ *(lCtlLightState) = AppliCtlSet[elementIndex].PresentLightness16;
+ *(lCtlLightState+1) = AppliCtlSet[elementIndex].PresentLightness16 >> 8;
+ *(lCtlLightState+2) = AppliCtlSet[elementIndex].PresentTemperature16;
+ *(lCtlLightState+3) = AppliCtlSet[elementIndex].PresentTemperature16 >>8;
+ *(lCtlLightState+4) = AppliCtlSet[elementIndex].PresentCtlDelta16;
+ *(lCtlLightState+5) = AppliCtlSet[elementIndex].PresentCtlDelta16 >>8;
return MOBLE_RESULT_SUCCESS;
}
/**
+* @brief Appli_Light_GetCtlTargetStatus: This function is callback for Application
+* to get the application values in middleware used for target state.
+* @param lCtlLightState: Pointer to the status message
+* @param dstPeer: destination send by peer for this node. It can be a
+* unicast or group address
+* @param elementIndex: index of the element received from peer for this node which
+* is elementNumber-1
+* @retval MOBLE_RESULT
+*/
+MOBLE_RESULT Appli_Light_GetCtlTargetStatus(MOBLEUINT8* lCtlLightState, MOBLEUINT16 dstPeer,
+ MOBLEUINT8 elementIndex)
+{
+ *(lCtlLightState) = AppliCtlSet[elementIndex].TargetLightness16;
+ *(lCtlLightState+1) = AppliCtlSet[elementIndex].TargetLightness16 >> 8;
+ *(lCtlLightState+2) = AppliCtlSet[elementIndex].TargetTemperature16;
+ *(lCtlLightState+3) = AppliCtlSet[elementIndex].TargetTemperature16 >>8;
+ *(lCtlLightState+4) = AppliCtlSet[elementIndex].TargetCtlDelta16;
+ *(lCtlLightState+5) = AppliCtlSet[elementIndex].TargetCtlDelta16 >>8;
+
+ return MOBLE_RESULT_SUCCESS;
+}
+
+
+/**
* @brief Appli_Light_GetCtlTeperatureStatus: This function is callback for Application
* to get the application values in middleware used for transition change.
* @param lCtlTempState: Pointer to the status message
+* @param dstPeer: destination send by peer for this node. It can be a
+* unicast or group address
+* @param elementIndex: index of the element received from peer for this node which
+* is elementNumber-1
* @retval MOBLE_RESULT
*/
-MOBLE_RESULT Appli_Light_GetCtlTemperatureStatus(MOBLEUINT8* lCtlTempState)
+MOBLE_RESULT Appli_Light_GetCtlTemperatureStatus(MOBLEUINT8* lCtlTempState, MOBLEUINT16 dstPeer,
+ MOBLEUINT8 elementIndex)
{
- *(lCtlTempState) = AppliCtlSet.PresentTemperature16;
- *(lCtlTempState+1) = AppliCtlSet.PresentTemperature16 >> 8;
- *(lCtlTempState+2) = AppliCtlSet.PresentCtlDelta16;
- *(lCtlTempState+3) = AppliCtlSet.PresentCtlDelta16 >>8;
- TRACE_M(TF_SERIAL_CTRL,"Get Ctl Temperature Status: temp: %d delta: %d\n\r",
- AppliCtlSet.PresentTemperature16,
- AppliCtlSet.PresentCtlDelta16);
+ *(lCtlTempState) = AppliCtlSet[elementIndex].PresentTemperature16;
+ *(lCtlTempState+1) = AppliCtlSet[elementIndex].PresentTemperature16 >> 8;
+ *(lCtlTempState+2) = AppliCtlSet[elementIndex].PresentCtlDelta16;
+ *(lCtlTempState+3) = AppliCtlSet[elementIndex].PresentCtlDelta16 >>8;
return MOBLE_RESULT_SUCCESS;
}
@@ -1371,19 +1646,20 @@ MOBLE_RESULT Appli_Light_GetCtlTemperatureStatus(MOBLEUINT8* lCtlTempState)
* @brief Appli_Light_GetCtlTemperatureRange: This function is callback for Application
* to get the application values in middleware used for transition change.
* @param lCtlTempRange: Pointer to the status message
+* @param dstPeer: destination send by peer for this node. It can be a
+* unicast or group address
+* @param elementIndex: index of the element received from peer for this node which
+* is elementNumber-1
* @retval MOBLE_RESULT
*/
-MOBLE_RESULT Appli_Light_GetCtlTemperatureRange(MOBLEUINT8* lCtlTempRange)
+MOBLE_RESULT Appli_Light_GetCtlTemperatureRange(MOBLEUINT8* lCtlTempRange, MOBLEUINT16 dstPeer,
+ MOBLEUINT8 elementIndex)
{
- *(lCtlTempRange) = AppliCtlTemperatureRangeSet.StatusCode;
- *(lCtlTempRange+1) = AppliCtlTemperatureRangeSet.RangeMin;
- *(lCtlTempRange+2) = AppliCtlTemperatureRangeSet.RangeMin >> 8;
- *(lCtlTempRange+3) = AppliCtlTemperatureRangeSet.RangeMax;
- *(lCtlTempRange+4) = AppliCtlTemperatureRangeSet.RangeMax >>8;
- TRACE_M(TF_SERIAL_CTRL,"Get Ctl Temperature Range: status: %d Min: %d Max: %d\n\r",
- AppliCtlTemperatureRangeSet.StatusCode,
- AppliCtlTemperatureRangeSet.RangeMin,
- AppliCtlTemperatureRangeSet.RangeMax);
+ *(lCtlTempRange) = AppliCtlTemperatureRangeSet[elementIndex].StatusCode;
+ *(lCtlTempRange+1) = AppliCtlTemperatureRangeSet[elementIndex].RangeMin;
+ *(lCtlTempRange+2) = AppliCtlTemperatureRangeSet[elementIndex].RangeMin >> 8;
+ *(lCtlTempRange+3) = AppliCtlTemperatureRangeSet[elementIndex].RangeMax;
+ *(lCtlTempRange+4) = AppliCtlTemperatureRangeSet[elementIndex].RangeMax >>8;
return MOBLE_RESULT_SUCCESS;
}
@@ -1393,20 +1669,21 @@ MOBLE_RESULT Appli_Light_GetCtlTemperatureRange(MOBLEUINT8* lCtlTempRange)
* @brief Appli_Light_GetCtlDefaultStatus: This function is callback for Application
* to get the application values in middleware used for transition change.
* @param lCtlDefaultState: Pointer to the status message
+* @param dstPeer: destination send by peer for this node. It can be a
+* unicast or group address
+* @param elementIndex: index of the element received from peer for this node which
+* is elementNumber-1
* @retval MOBLE_RESULT
*/
-MOBLE_RESULT Appli_Light_GetCtlDefaultStatus(MOBLEUINT8* lCtlDefaultState)
+MOBLE_RESULT Appli_Light_GetCtlDefaultStatus(MOBLEUINT8* lCtlDefaultState, MOBLEUINT16 dstPeer,
+ MOBLEUINT8 elementIndex)
{
- *(lCtlDefaultState) = AppliCtlDefaultSet.CtlDefaultLightness16;
- *(lCtlDefaultState+1) = AppliCtlDefaultSet.CtlDefaultLightness16 >> 8;
- *(lCtlDefaultState+2) = AppliCtlDefaultSet.CtlDefaultTemperature16;
- *(lCtlDefaultState+3) = AppliCtlDefaultSet.CtlDefaultTemperature16 >>8;
- *(lCtlDefaultState+4) = AppliCtlDefaultSet.CtlDefaultDeltaUv;
- *(lCtlDefaultState+5) = AppliCtlDefaultSet.CtlDefaultDeltaUv >>8;
- TRACE_M(TF_SERIAL_CTRL,"Get Ctl Default Status: lightness: %d temp: %d deltaUV: %d\n\r",
- AppliCtlDefaultSet.CtlDefaultLightness16,
- AppliCtlDefaultSet.CtlDefaultTemperature16,
- AppliCtlDefaultSet.CtlDefaultDeltaUv);
+ *(lCtlDefaultState) = AppliCtlDefaultSet[elementIndex].CtlDefaultLightness16;
+ *(lCtlDefaultState+1) = AppliCtlDefaultSet[elementIndex].CtlDefaultLightness16 >> 8;
+ *(lCtlDefaultState+2) = AppliCtlDefaultSet[elementIndex].CtlDefaultTemperature16;
+ *(lCtlDefaultState+3) = AppliCtlDefaultSet[elementIndex].CtlDefaultTemperature16 >>8;
+ *(lCtlDefaultState+4) = AppliCtlDefaultSet[elementIndex].CtlDefaultDeltaUv;
+ *(lCtlDefaultState+5) = AppliCtlDefaultSet[elementIndex].CtlDefaultDeltaUv >> 8;
return MOBLE_RESULT_SUCCESS;
}
@@ -1427,36 +1704,65 @@ Following Functions are used for the LIGHTING HSL MODEL
* @brief Appli_Light_GetHslStatus: This function is callback for Application
* to get the application values in middleware used for transition change.
* @param lHslState: Pointer to the status message
+* @param dstPeer: destination send by peer for this node. It can be a
+* unicast or group address
+* @param elementIndex: index of the element received from peer for this node which
+* is elementNumber-1
* @retval MOBLE_RESULT
*/
-MOBLE_RESULT Appli_Light_GetHslStatus(MOBLEUINT8* lHslState)
+MOBLE_RESULT Appli_Light_GetHslStatus(MOBLEUINT8* lHslState, MOBLEUINT16 dstPeer,
+ MOBLEUINT8 elementIndex)
{
- *(lHslState) = AppliHslSet.HslLightness16;
- *(lHslState+1) = AppliHslSet.HslLightness16 >> 8;
- *(lHslState+2) = AppliHslSet.HslHueLightness16;
- *(lHslState+3) = AppliHslSet.HslHueLightness16 >>8;
- *(lHslState+4) = AppliHslSet.HslSaturation16;
- *(lHslState+5) = AppliHslSet.HslSaturation16 >>8;
- TRACE_M(TF_SERIAL_CTRL,"Get Hsl Status: lightness: %d hue: %d saturation: %d\n\r",
- AppliHslSet.HslLightness16,
- AppliHslSet.HslHueLightness16,
- AppliHslSet.HslSaturation16);
+ *(lHslState) = AppliHslSet[elementIndex].HslLightness16;
+ *(lHslState+1) = AppliHslSet[elementIndex].HslLightness16 >> 8;
+ *(lHslState+2) = AppliHslSet[elementIndex].HslHueLightness16;
+ *(lHslState+3) = AppliHslSet[elementIndex].HslHueLightness16 >>8;
+ *(lHslState+4) = AppliHslSet[elementIndex].HslSaturation16;
+ *(lHslState+5) = AppliHslSet[elementIndex].HslSaturation16 >>8;
return MOBLE_RESULT_SUCCESS;
}
+
+/**
+* @brief Appli_Light_GetHslTargetStatus: This function is callback for Application
+* to get the application values in middleware used for target state.
+* @param lHslState: Pointer to the status message
+* @param dstPeer: destination send by peer for this node. It can be a
+* unicast or group address
+* @param elementIndex: index of the element received from peer for this node which
+* is elementNumber-1
+* @retval MOBLE_RESULT
+*/
+MOBLE_RESULT Appli_Light_GetHslTargetStatus(MOBLEUINT8* lHslState, MOBLEUINT16 dstPeer,
+ MOBLEUINT8 elementIndex)
+{
+ *(lHslState) = AppliHslSet[elementIndex].TargetHslLightness16;
+ *(lHslState+1) = AppliHslSet[elementIndex].TargetHslLightness16 >> 8;
+ *(lHslState+2) = AppliHslSet[elementIndex].TargetHslHueLightness16;
+ *(lHslState+3) = AppliHslSet[elementIndex].TargetHslHueLightness16 >>8;
+ *(lHslState+4) = AppliHslSet[elementIndex].TargetHslSaturation16;
+ *(lHslState+5) = AppliHslSet[elementIndex].TargetHslSaturation16 >>8;
+
+ return MOBLE_RESULT_SUCCESS;
+}
+
+
/**
* @brief Appli_Light_GetHslHueStatus: This function is callback for Application
* to get the application values in middleware used for transition change.
* @param lHslHueState: Pointer to the status message
+* @param dstPeer: destination send by peer for this node. It can be a
+* unicast or group address
+* @param elementIndex: index of the element received from peer for this node which
+* is elementNumber-1
* @retval MOBLE_RESULT
*/
-MOBLE_RESULT Appli_Light_GetHslHueStatus(MOBLEUINT8* lHslHueState)
+MOBLE_RESULT Appli_Light_GetHslHueStatus(MOBLEUINT8* lHslHueState, MOBLEUINT16 dstPeer,
+ MOBLEUINT8 elementIndex)
{
- *(lHslHueState) = AppliHslSet.HslHueLightness16;
- *(lHslHueState+1) = AppliHslSet.HslHueLightness16 >>8;
- TRACE_M(TF_SERIAL_CTRL,"Get Hsl Hue Status: %d\n\r",
- AppliHslSet.HslHueLightness16);
+ *(lHslHueState) = AppliHslSet[elementIndex].HslHueLightness16;
+ *(lHslHueState+1) = AppliHslSet[elementIndex].HslHueLightness16 >>8;
return MOBLE_RESULT_SUCCESS;
}
@@ -1466,14 +1772,17 @@ MOBLE_RESULT Appli_Light_GetHslHueStatus(MOBLEUINT8* lHslHueState)
* @brief Appli_Light_GetHslSaturationStatus: This function is callback for Application
* to get the application values in middleware used for transition change
* @param lHslSaturationState: Pointer to the status message
+* @param dstPeer: destination send by peer for this node. It can be a
+* unicast or group address
+* @param elementIndex: index of the element received from peer for this node which
+* is elementNumber-1
* @retval MOBLE_RESULT
*/
-MOBLE_RESULT Appli_Light_GetHslSaturationStatus(MOBLEUINT8* lHslSaturationState)
+MOBLE_RESULT Appli_Light_GetHslSaturationStatus(MOBLEUINT8* lHslSaturationState, MOBLEUINT16 dstPeer,
+ MOBLEUINT8 elementIndex)
{
- *(lHslSaturationState) = AppliHslSet.HslSaturation16;
- *(lHslSaturationState+1) = AppliHslSet.HslSaturation16 >>8;
- TRACE_M(TF_SERIAL_CTRL,"Get Hsl Saturation Status: %d\n\r",
- AppliHslSet.HslSaturation16);
+ *(lHslSaturationState) = AppliHslSet[elementIndex].HslSaturation16;
+ *(lHslSaturationState+1) = AppliHslSet[elementIndex].HslSaturation16 >>8;
return MOBLE_RESULT_SUCCESS;
}
@@ -1482,16 +1791,21 @@ MOBLE_RESULT Appli_Light_GetHslSaturationStatus(MOBLEUINT8* lHslSaturationState)
* @brief Appli_Light_GetHslDefaultStatus: This function is callback for Application
* to get the application values in middleware used for transition change.
* @param lHslDefaultState: Pointer to the status message
+* @param dstPeer: destination send by peer for this node. It can be a
+* unicast or group address
+* @param elementIndex: index of the element received from peer for this node which
+* is elementNumber-1
* @retval MOBLE_RESULT
*/
-MOBLE_RESULT Appli_Light_GetHslDefaultStatus(MOBLEUINT8* lHslDefaultState)
+MOBLE_RESULT Appli_Light_GetHslDefaultStatus(MOBLEUINT8* lHslDefaultState, MOBLEUINT16 dstPeer,
+ MOBLEUINT8 elementIndex)
{
- *(lHslDefaultState) = Appli_HslDefaultSet.HslDefaultLightness16;
- *(lHslDefaultState+1) = Appli_HslDefaultSet.HslDefaultLightness16 >> 8;
- *(lHslDefaultState+2) = Appli_HslDefaultSet.HslDefaultHueLightness16;
- *(lHslDefaultState+3) = Appli_HslDefaultSet.HslDefaultHueLightness16 >>8;
- *(lHslDefaultState+4) = Appli_HslDefaultSet.HslDefaultSaturation16;
- *(lHslDefaultState+5) = Appli_HslDefaultSet.HslDefaultSaturation16 >>8;
+ *(lHslDefaultState) = Appli_HslDefaultSet[elementIndex].HslDefaultLightness16;
+ *(lHslDefaultState+1) = Appli_HslDefaultSet[elementIndex].HslDefaultLightness16 >> 8;
+ *(lHslDefaultState+2) = Appli_HslDefaultSet[elementIndex].HslDefaultHueLightness16;
+ *(lHslDefaultState+3) = Appli_HslDefaultSet[elementIndex].HslDefaultHueLightness16 >>8;
+ *(lHslDefaultState+4) = Appli_HslDefaultSet[elementIndex].HslDefaultSaturation16;
+ *(lHslDefaultState+5) = Appli_HslDefaultSet[elementIndex].HslDefaultSaturation16 >>8;
return MOBLE_RESULT_SUCCESS;
}
@@ -1500,19 +1814,20 @@ MOBLE_RESULT Appli_Light_GetHslDefaultStatus(MOBLEUINT8* lHslDefaultState)
* @brief Appli_Light_GetHslSatRange: This function is callback for Application
* to get the application values in middleware used for transition change
* @param lHslSatRange: Pointer to the status message
+* @param dstPeer: destination send by peer for this node. It can be a
+* unicast or group address
+* @param elementIndex: index of the element received from peer for this node which
+* is elementNumber-1
* @retval MOBLE_RESULT
*/
-MOBLE_RESULT Appli_Light_GetHslSatRange(MOBLEUINT8* lHslSatRange)
+MOBLE_RESULT Appli_Light_GetHslSatRange(MOBLEUINT8* lHslSatRange, MOBLEUINT16 dstPeer,
+ MOBLEUINT8 elementIndex)
{
- *(lHslSatRange) = AppliHslRangeSet.StatusCode;
- *(lHslSatRange+1) = AppliHslRangeSet.HslMinSaturation16;
- *(lHslSatRange+2) = AppliHslRangeSet.HslMinSaturation16 >> 8;
- *(lHslSatRange+3) = AppliHslRangeSet.HslMaxSaturation16;
- *(lHslSatRange+4) = AppliHslRangeSet.HslMaxSaturation16 >>8;
- TRACE_M(TF_SERIAL_CTRL,"Get Hsl Saturation Range: status: %d min: %d max: %d\n\r",
- AppliHslRangeSet.StatusCode,
- AppliHslRangeSet.HslMinSaturation16,
- AppliHslRangeSet.HslMaxSaturation16);
+ *(lHslSatRange) = AppliHslRangeSet[elementIndex].StatusCode;
+ *(lHslSatRange+1) = AppliHslRangeSet[elementIndex].HslMinSaturation16;
+ *(lHslSatRange+2) = AppliHslRangeSet[elementIndex].HslMinSaturation16 >> 8;
+ *(lHslSatRange+3) = AppliHslRangeSet[elementIndex].HslMaxSaturation16;
+ *(lHslSatRange+4) = AppliHslRangeSet[elementIndex].HslMaxSaturation16 >>8;
return MOBLE_RESULT_SUCCESS;
}
@@ -1521,19 +1836,20 @@ MOBLE_RESULT Appli_Light_GetHslSatRange(MOBLEUINT8* lHslSatRange)
* @brief Appli_Light_GetHslHueRange: This function is callback for Application
* to get the application values in middleware used for transition change.
* @param lHslHueRange: Pointer to the status message
+* @param dstPeer: destination send by peer for this node. It can be a
+* unicast or group address
+* @param elementIndex: index of the element received from peer for this node which
+* is elementNumber-1
* @retval MOBLE_RESULT
*/
-MOBLE_RESULT Appli_Light_GetHslHueRange(MOBLEUINT8* lHslHueRange)
+MOBLE_RESULT Appli_Light_GetHslHueRange(MOBLEUINT8* lHslHueRange, MOBLEUINT16 dstPeer,
+ MOBLEUINT8 elementIndex)
{
- *(lHslHueRange) = AppliHslRangeSet.StatusCode;
- *(lHslHueRange+1) = AppliHslRangeSet.HslHueMinRange16;
- *(lHslHueRange+2) = AppliHslRangeSet.HslHueMinRange16 >> 8;
- *(lHslHueRange+3) = AppliHslRangeSet.HslHueMaxRange16;
- *(lHslHueRange+4) = AppliHslRangeSet.HslHueMaxRange16 >>8;
- TRACE_M(TF_SERIAL_CTRL,"Get Hsl Hue Range: status: %d min: %d max: %d\n\r",
- AppliHslRangeSet.StatusCode,
- AppliHslRangeSet.HslHueMinRange16,
- AppliHslRangeSet.HslHueMaxRange16);
+ *(lHslHueRange) = AppliHslRangeSet[elementIndex].StatusCode;
+ *(lHslHueRange+1) = AppliHslRangeSet[elementIndex].HslHueMinRange16;
+ *(lHslHueRange+2) = AppliHslRangeSet[elementIndex].HslHueMinRange16 >> 8;
+ *(lHslHueRange+3) = AppliHslRangeSet[elementIndex].HslHueMaxRange16;
+ *(lHslHueRange+4) = AppliHslRangeSet[elementIndex].HslHueMaxRange16 >>8;
return MOBLE_RESULT_SUCCESS;
}
@@ -1563,21 +1879,24 @@ void Appli_Light_PwmInit()
* @param value1: This value corresponds to red led.
* @param value2: This value corresponds to green led .
* @param value3: This value corresponds to blue led .
+* @param elementIndex: index of the element received from peer for this node which
+* is elementNumber-1
* @retval void
*/
-void RgbF_Create(MOBLEUINT16 value1, MOBLEUINT16 value2, MOBLEUINT16 value3)
+void RgbF_Create(MOBLEUINT16 value1, MOBLEUINT16 value2, MOBLEUINT16 value3, MOBLEUINT8 elementIndex)
{
- Appli_RGBParam.Red_Value = (MOBLEUINT16)(65535 * value1/1000);
- Appli_RGBParam.Green_Value = (MOBLEUINT16)(65535 * value2/1000);
- Appli_RGBParam.Blue_Value = (MOBLEUINT16)(65535 * value3/1000);
+ Appli_RGBParam[elementIndex].Red_Value = (MOBLEUINT16)(65535 * value1/1000);
+ Appli_RGBParam[elementIndex].Green_Value = (MOBLEUINT16)(65535 * value2/1000);
+ Appli_RGBParam[elementIndex].Blue_Value = (MOBLEUINT16)(65535 * value3/1000);
}
/**
* @brief Function to convert the HSL values in RGB values.
-* @param void
+* @param elementIndex: index of the element received from peer for this node which
+* is elementNumber-1
* @retval void
*/
-void HSL2RGB_Conversion(void)
+void HSL2RGB_Conversion(MOBLEUINT8 elementIndex)
{
MOBLEUINT16 hueValue;
@@ -1587,24 +1906,24 @@ void HSL2RGB_Conversion(void)
MOBLEUINT16 mValue; /* intermediate value used for creating the r,g,b baseline */
MOBLEUINT16 xValue; /* intermediate value used for computing r,g,b */
- if(AppliHslSet.HslSaturation16 == 0)
+ if(AppliHslSet[elementIndex].HslSaturation16 == 0)
{
- Appli_RGBParam.Red_Value = AppliHslSet.HslLightness16 ;
- Appli_RGBParam.Green_Value = AppliHslSet.HslLightness16 ;
- Appli_RGBParam.Blue_Value = AppliHslSet.HslLightness16 ;
+ Appli_RGBParam[elementIndex].Red_Value = AppliHslSet[elementIndex].HslLightness16 ;
+ Appli_RGBParam[elementIndex].Green_Value = AppliHslSet[elementIndex].HslLightness16 ;
+ Appli_RGBParam[elementIndex].Blue_Value = AppliHslSet[elementIndex].HslLightness16 ;
}
- else if((AppliHslSet.HslLightness16 == 0xFFFF) || (AppliHslSet.HslLightness16 == 0x00))
+ else if((AppliHslSet[elementIndex].HslLightness16 == 0xFFFF) || (AppliHslSet[elementIndex].HslLightness16 == 0x00))
{
- Appli_RGBParam.Red_Value = AppliHslSet.HslLightness16 ;
- Appli_RGBParam.Green_Value = AppliHslSet.HslLightness16 ;
- Appli_RGBParam.Blue_Value = AppliHslSet.HslLightness16 ;
+ Appli_RGBParam[elementIndex].Red_Value = AppliHslSet[elementIndex].HslLightness16 ;
+ Appli_RGBParam[elementIndex].Green_Value = AppliHslSet[elementIndex].HslLightness16 ;
+ Appli_RGBParam[elementIndex].Blue_Value = AppliHslSet[elementIndex].HslLightness16 ;
}
else
{
/* Hue is calculated for angular value. so converting in between 0 to 360 degree */
- hueValue = (MOBLEUINT16)(360 * (float)AppliHslSet.HslHueLightness16/65535);
- lightnessvalue = (float)AppliHslSet.HslLightness16/65535;
- saturationValue = (float)AppliHslSet.HslSaturation16/65535;
+ hueValue = (MOBLEUINT16)(360 * (float)AppliHslSet[elementIndex].HslHueLightness16/65535);
+ lightnessvalue = (float)AppliHslSet[elementIndex].HslLightness16/65535;
+ saturationValue = (float)AppliHslSet[elementIndex].HslSaturation16/65535;
/* Formula to get the values used for RGB conversion */
cValue = (MOBLEUINT16)(((1- fabs(2 * lightnessvalue-1))*saturationValue) * 1000);
@@ -1614,33 +1933,33 @@ void HSL2RGB_Conversion(void)
/* Conditons applied for the different angle of hue value */
if (hueValue > 0 && hueValue < (HUE_UPPER_LIMIT / 6))
{
- RgbF_Create(cValue + mValue, xValue + mValue, mValue);
+ RgbF_Create(cValue + mValue, xValue + mValue, mValue, elementIndex);
}
else if (hueValue >= (HUE_UPPER_LIMIT / 6) && hueValue < (HUE_UPPER_LIMIT / 3))
{
- RgbF_Create(xValue + mValue, cValue + mValue, mValue);
+ RgbF_Create(xValue + mValue, cValue + mValue, mValue, elementIndex);
}
else if (hueValue >= (HUE_UPPER_LIMIT / 3) && hueValue < (HUE_UPPER_LIMIT / 2))
{
- RgbF_Create(mValue, cValue + mValue, xValue + mValue);
+ RgbF_Create(mValue, cValue + mValue, xValue + mValue, elementIndex);
}
else if (hueValue >= (HUE_UPPER_LIMIT / 2)
&& hueValue < (2 * HUE_UPPER_LIMIT / 3))
{
- RgbF_Create(mValue, xValue + mValue, cValue + mValue);
+ RgbF_Create(mValue, xValue + mValue, cValue + mValue, elementIndex);
}
else if (hueValue >= (2 * HUE_UPPER_LIMIT / 3)
&& hueValue < (5 * HUE_UPPER_LIMIT / 6))
{
- RgbF_Create(xValue + mValue, mValue, cValue + mValue);
+ RgbF_Create(xValue + mValue, mValue, cValue + mValue, elementIndex);
}
else if ((hueValue >= (5 * HUE_UPPER_LIMIT / 6) && hueValue <= HUE_UPPER_LIMIT) || (hueValue == 0))
{
- RgbF_Create(cValue + mValue, mValue, xValue + mValue);
+ RgbF_Create(cValue + mValue, mValue, xValue + mValue, elementIndex);
}
else
{
- RgbF_Create(mValue, mValue, mValue);
+ RgbF_Create(mValue, mValue, mValue, elementIndex);
}
}
}
@@ -1778,5 +2097,5 @@ void Light_UpdateLedValue(MOBLEUINT8 state ,Appli_LightPwmValue_t light_state)
/**
* @}
*/
-/******************* (C) COPYRIGHT 2019 STMicroelectronics *****END OF FILE****/
+/******************* (C) COPYRIGHT 2020 STMicroelectronics *****END OF FILE****/