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

appli_generic_client.c « app « STM32_WPAN « BLE_MeshLightingPRFNode « BLE « Applications « NUCLEO-WB15CC « Projects - github.com/Flipper-Zero/STM32CubeWB.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: 9c9ff64805ce55f982ce1a09cb2804b85bad944f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
/* USER CODE BEGIN Header */
/**
  ******************************************************************************
  * @file    appli_generic_client.c
  * @author  MCD Application Team
  * @brief   Application interface for Generic Mesh Models 
  ******************************************************************************
  * @attention
  *
  * Copyright (c) 2021 STMicroelectronics.
  * All rights reserved.
  *
  * This software is licensed under terms that can be found in the LICENSE file
  * in the root directory of this software component.
  * If no LICENSE file comes with this software, it is provided AS-IS.
  *
  ******************************************************************************
  */
/* USER CODE END Header */

/* Includes ------------------------------------------------------------------*/
#include "hal_common.h"
#include "types.h"
#include "appli_generic.h"
#include "appli_light.h"
#include "common.h"
#include "mesh_cfg_usr.h"
#include "appli_nvm.h"
#include "appli_mesh.h"
#include "generic_client.h"
#include "appli_generic_client.h"

/** @addtogroup ST_BLE_Mesh
*  @{
*/

/** @addtogroup Application_Mesh_Models
*  @{
*/

/* Private typedef -----------------------------------------------------------*/
/* Private define ------------------------------------------------------------*/
/* Private macro -------------------------------------------------------------*/
/* Private variables ---------------------------------------------------------*/
/* Private function prototypes -----------------------------------------------*/
/* Private functions ---------------------------------------------------------*/

/**
* @brief  Appli_Generic_OnOff_Status: This function is callback for Application
*          when Generic OnOff message is received
* @param  pOnOff_status: Pointer to the parameters received for message
* @param  plength: length of the 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_Generic_OnOff_Status(MOBLEUINT8 const *pOnOff_status, MOBLEUINT32 plength, 
                                        MOBLEUINT16 dstPeer, MOBLEUINT8 elementIndex)
{
  MOBLEUINT8 i;
  
  TRACE_M(TF_GENERIC,"Generic_OnOff_Status callback received for element %d \r\n", elementIndex);
  TRACE_M(TF_SERIAL_CTRL,"#8204!\r\n");
  
  for(i = 0; i < plength; i++)
  {
    if(i == 0)
      TRACE_M(TF_SERIAL_CTRL,"Present OnOff value: %d\n\r", pOnOff_status[i]);
    else if(i == 1)
      TRACE_M(TF_SERIAL_CTRL,"Target OnOff value: %d\n\r", pOnOff_status[i]);
    else if(i == 2)
      TRACE_M(TF_SERIAL_CTRL,"Remaining Time value: %d\n\r", pOnOff_status[i]);
  }
  
  return MOBLE_RESULT_SUCCESS;
}

/******************************************************************************/
#ifdef ENABLE_GENERIC_MODEL_CLIENT_LEVEL
/******************************************************************************/

  /**
* @brief  Appli_Generic_Level_Status: This function is callback for Application
*          when Generic Level Move message is received
* @param  plevel_status: Pointer to the parameters 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_Generic_Level_Status(MOBLEUINT8 const *plevel_status, 
                                        MOBLEUINT32 plength,
                                        MOBLEUINT16 dstPeer, 
                                        MOBLEUINT8 elementIndex)
{
#if ( CFG_DEBUG_TRACE != 0 )
  MOBLEUINT8 i;
  MOBLEUINT8 level = 0;
#endif
  
  TRACE_M(TF_GENERIC,"Generic_Level_Status callback received for element %d \r\n", elementIndex);
  TRACE_M(TF_SERIAL_CTRL,"#8208! \r\n");
      
#if ( CFG_DEBUG_TRACE != 0 )
  for(i = 0; i < plength; i++)
  {
    if((i == 0) || (i == 2))
      level = plevel_status[i];
    else if(i == 1)
      TRACE_M(TF_SERIAL_CTRL,"Present Level value: %d%\n\r", 
              (((plevel_status[i]<<8)|level)*100/LEVEL_MAX_VALID_RANGE));
    else if(i == 3)
      TRACE_M(TF_SERIAL_CTRL,"Target Level value: %d%\n\r", 
              (((plevel_status[i]<<8)|level)*100/LEVEL_MAX_VALID_RANGE));
    else if(i == 4)
      TRACE_M(TF_SERIAL_CTRL,"Remaining Time value: %d\n\r", plevel_status[i]);
  }
#endif
  
  return MOBLE_RESULT_SUCCESS;
}

/******************************************************************************/
#endif  /* #ifdef ENABLE_GENERIC_MODEL_CLIENT_LEVEL */
/******************************************************************************/

/**
* @brief  Appli_Generic_DefaultTransitionTime_Status: This function is callback for Application
*          when Generic Power on off set message is received
* @param  pTransition_status: Pointer to the parameters 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_Generic_DefaultTransitionTime_Status(MOBLEUINT8 const *pTransition_status , MOBLEUINT32 plength,MOBLEUINT16 dstPeer, MOBLEUINT8 elementIndex) 
{  

  TRACE_M(TF_GENERIC,"Generic_DefaultTransitionTime_Status callback received for element %d \r\n", elementIndex);
  TRACE_M(TF_SERIAL_CTRL,"#8210!\r\n");
  
  return MOBLE_RESULT_SUCCESS;
}

/**
* @brief  Appli_Generic_PowerOnOff_Set: This function is callback for Application
*           when Generic Power on off set message is received
* @param   powerOnOff_status: Pointer to the parameters 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_Generic_PowerOnOff_Status(MOBLEUINT8 const *powerOnOff_status,\
                 MOBLEUINT32 plength, MOBLEUINT16 dstPeer, MOBLEUINT8 elementIndex) 
{  
  MOBLEUINT8 i;

  TRACE_M(TF_GENERIC,"Generic_PowerOnOff_Status callback received for element %d \r\n", elementIndex);
  TRACE_M(TF_SERIAL_CTRL,"#8212!\r\n");
  
  for(i = 0; i < plength; i++)
  {
    if(i == 0)
      TRACE_M(TF_SERIAL_CTRL,"On Power up value: %d\n\r", 
              powerOnOff_status[i]);
  }

  return MOBLE_RESULT_SUCCESS;
}

/**
* @brief  Appli_GenericClient_API: This function is a Wrapper to call Generic Client API depending on opcode received in input
* @param  elementIndex: Index of the element
* @param  msg_opcode: opcode of the desired API
* @param  msg_params: buffer containing the desired API parameters
* @retval MOBLE_RESULT
*/ 
MOBLE_RESULT Appli_GenericClient_API(MOBLEUINT8 elementIndex, MOBLEUINT16 msg_opcode, MOBLEUINT8 *msg_params) 
{ 
  MOBLE_RESULT result = MOBLE_RESULT_FAIL;
  switch(msg_opcode){
/******************************************************************************/
#ifdef ENABLE_GENERIC_MODEL_CLIENT_ONOFF  
/******************************************************************************/
  case GENERIC_ON_OFF_GET:
    {
      result = GenericClient_OnOff_Get(elementIndex);
      break;
    }
  case GENERIC_ON_OFF_SET_ACK:
    {
      result = GenericClient_OnOff_Set_Ack(elementIndex,
                              msg_params, 
                              sizeof(Generic_OnOffParam_t) ); 
      break;
    }
  case GENERIC_ON_OFF_SET_UNACK:
    {  
      result = GenericClient_OnOff_Set_Unack(elementIndex,
                              msg_params, 
                              sizeof(Generic_OnOffParam_t) );
      break;
    }
/******************************************************************************/    
#endif /* #ifdef ENABLE_GENERIC_MODEL_CLIENT_ONOFF */
/******************************************************************************/   
    
/******************************************************************************/
#ifdef ENABLE_GENERIC_MODEL_CLIENT_LEVEL 
/******************************************************************************/
  case GENERIC_LEVEL_GET:
    {
      result = GenericClient_Level_Get(elementIndex);
      break;
    }
  case GENERIC_LEVEL_SET_ACK:
    {
      result = GenericClient_Level_Set_Ack(elementIndex,
                                    msg_params, 
                                    (sizeof(Generic_LevelParam_t)-2));
      break;
    }
  case GENERIC_LEVEL_SET_UNACK:
    {
      result = GenericClient_Level_Set_Unack(elementIndex,
                                    msg_params, 
                                    (sizeof(Generic_LevelParam_t)-2));
      break;
    }
  case GENERIC_DELTA_SET:
    {

      result = GenericClient_Delta_Set_Ack(elementIndex,
                                    msg_params, 
                                    sizeof(Generic_DeltaLevelParam_t));
        break;
    }
  case GENERIC_DELTA_SET_UNACK:
    {
      result = GenericClient_Delta_Set_Unack(elementIndex,
                                    msg_params, 
                                    sizeof(Generic_DeltaLevelParam_t));
      break;
    }  
  case GENERIC_MOVE_SET:
    {
      result = GenericClient_Move_Set_Ack(elementIndex,
                                    msg_params, 
                                    sizeof(Generic_LevelMoveParam_t));
        break;
    }
  case GENERIC_MOVE_SET_UNACK:
    {
      result = GenericClient_Move_Set_Unack(elementIndex,
                                    msg_params, 
                                    sizeof(Generic_LevelMoveParam_t));
      break;
    }   
/******************************************************************************/    
#endif /* #ifdef ENABLE_GENERIC_MODEL_CLIENT_LEVEL */
/******************************************************************************/   

/******************************************************************************/
#ifdef ENABLE_GENERIC_MODEL_CLIENT_POWER_ONOFF 
/******************************************************************************/
  case GENERIC_POWER_ON_OFF_GET:
    {
      GenericClient_PowerOnOff_Get(elementIndex);
      break;
    }
  case GENERIC_POWER_ON_OFF_SET:
    {
      result = GenericClient_PowerOnOff_Set_Ack(elementIndex,
                                  msg_params, 
                                  sizeof(Generic_PowerOnOffParam_t));
      break;
    }
      case GENERIC_POWER_ON_OFF_SET_UNACK:
    {
      result = GenericClient_PowerOnOff_Set_Unack(elementIndex,
                                  msg_params, 
                                  sizeof(Generic_PowerOnOffParam_t));
      break;
    }
    
/******************************************************************************/    
#endif /* #ifdef ENABLE_GENERIC_MODEL_CLIENT_POWER_ONOFF */
/******************************************************************************/   

/******************************************************************************/    
#ifdef ENABLE_GENERIC_MODEL_CLIENT_DEFAULT_TRANSITION_TIME 
/******************************************************************************/
  case GENERIC_DEFAULT_TRANSITION_TIME_GET:
    {
      result = GenericClient_DefaultTransitionTime_Get(elementIndex);
      break;
    }
    
  case GENERIC_DEFAULT_TRANSITION_TIME_SET:
    {
      result = GenericClient_DefaultTransitionTime_Set_Ack(elementIndex,
                                  msg_params, 
                                  sizeof(Generic_DefaultTransitionParam_t));
      break;
    }
    
      case GENERIC_DEFAULT_TRANSITION_TIME_SET_UNACK:
    { 
      result = GenericClient_DefaultTransitionTime_Set_Unack(elementIndex,
                                  msg_params, 
                                  sizeof(Generic_DefaultTransitionParam_t));
      break;
    }
    
/******************************************************************************/    
#endif /* #ifdef ENABLE_GENERIC_MODEL_CLIENT_DEFAULT_TRANSITION_TIME */
/******************************************************************************/ 
 
  default:
    {
      TRACE_M(TF_GENERIC, "OpCode value invalid %d \r\n", msg_opcode);
      result = MOBLE_RESULT_FAIL;
    }
  }
  return result;
}

/**
* @}
*/

/**
* @}
*/