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

common.h « Inc « MeshModel « mesh « ble « STM32_WPAN « ST « Middlewares - github.com/Flipper-Zero/STM32CubeWB.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: 7762aaa94edfd28286e2d28e86d8ca8ea134ea06 (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
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
/**
******************************************************************************
* @file    common.h
* @author  BLE Mesh Team
* @brief   Model middleware file
******************************************************************************
* @attention
*
* <h2><center>&copy; Copyright (c) 2020 STMicroelectronics.
* All rights reserved.</center></h2>
*
* This software component is licensed by ST under Ultimate Liberty license
* SLA0044, the "License"; You may not use this file except in compliance with
* the License. You may obtain a copy of the License at:
*                             www.st.com/SLA0044
*
******************************************************************************
*/
#ifndef __COMMON_H
#define __COMMON_H

/* Includes ------------------------------------------------------------------*/
#include "types.h"
#include "ble_mesh.h"

/* Exported macro ------------------------------------------------------------*/
/* Macros defined for the number of bytes saved, number of bytes dedicated 
   for ganeric model and light model */
//#define APP_NVM_GENERIC_MODEL_SIZE                                            16U
//#define APP_NVM_LIGHT_MODEL_SIZE                                              32U
#define APP_NVM_LIGHT_LC_MODEL_SIZE                                           4U
#if 0
#define APP_NVM_MODELDATA_PER_ELEMENT_SIZE  (APP_NVM_GENERIC_MODEL_SIZE + \
                                             APP_NVM_LIGHT_MODEL_SIZE + \
                                             APP_NVM_LIGHT_LC_MODEL_SIZE)
#endif
#define APP_NVM_MODEL_SIZE   (APP_NVM_MODELDATA_PER_ELEMENT_SIZE * APPLICATION_NUMBER_OF_ELEMENTS)

#define GENERIC_VALID_FLAG                                                  0xAA

#define TESTING_BYTE                                                         240
/* 16 bytes are reserved for generic */
#define GENERIC_VALID_FLAG_OFFSET                                              0
#define GENERIC_ON_OFF_NVM_OFFSET                                              1
#define GENERIC_LEVEL_NVM_OFFSET                                               2
#define GENERIC_POWER_ON_OFF_NVM_OFFSET                                        4
/* 16 bytes are reserved for light
*  Light model nvm offset is 16 bytes ahead of generic model */
#define LIGHT_VALID_FLAG_OFFSET                                                0
#define LIGHT_LIGHTNESS_PRESENT_NVM_OFFSET                                     1      
#define LIGHT_LIGHTNESS_TARGET_NVM_OFFSET                                      3      
#define LIGHT_LIGHTNESS_DEFAULT_NVM_OFFSET                                     5
#define LIGHT_LIGHTNESS_LAST_NVM_OFFSET                                        7
#define LIGHT_TRANSITION_STATUS                                                9
#define LIGHT_CTL_NVM_OFFSET                                                  10
#define LIGHT_CTL_DEFAULT_NVM_OFFSET                                          16
#define LIGHT_HSL_NVM_OFFSET                                                  22
#define LIGHT_HSL_DEFAULT_NVM_OFFSET                                          28
#define LIGHT_LC_MODE_NVM_OFFSET                                              48

/*  Light model nvm offset used for local array*/
#define LIGHT_DEFAULT_OFFSET                                                   6
/* Buffer index limit for the generic data */
#define GENERIC_DATA_LIMIT                                                    15

#define No_NVM_FLAG                                                         0XFE
#define GENERIC_ON_OFF_NVM_FLAG                                             0X01
#define GENERIC_LEVEL_NVM_FLAG                                              0X02
#define LIGHT_LIGHTNESS_NVM_FLAG                                            0X03
#define LIGHT_CTL_NVM_FLAG                                                  0X04
#define LIGHT_HSL_NVM_FLAG                                                  0X05
#define LIGHT_LC_NVM_FLAG                                                   0X06
                                               
#define GENERIC_POWER_OFF_STATE                                             0X00
#define GENERIC_POWER_ON_STATE                                              0X01
#define GENERIC_POWER_RESTORE_STATE                                         0X02
                                               
#define FLAG_SET                                                               1
#define FLAG_RESET                                                             0

#define VALUE_UPDATE_SET                                                    0X01
#define VALUE_UPDATE_RESET                                                  0X00

#define CLK_FLAG_ENABLE                                                        1 
#define CLK_FLAG_DISABLE                                                       0 

#define PWM_ZERO_VALUE                                                         1
#define INTENSITY_LEVEL_ZERO                                                0X00
#define INTENSITY_LEVEL_FULL                                              31990U

#define MAX_TID_VALUE                                                       0XFF

#define STEP_HEX_VALUE_0                                                    0X00
#define STEP_HEX_VALUE_1                                                    0X01
#define STEP_HEX_VALUE_2                                                    0X02
#define STEP_HEX_VALUE_3                                                    0X03

#define STEP_RESOLUTION_100MS                                                100
#define STEP_RESOLUTION_1S                                                  1000
#define STEP_RESOLUTION_10S                                                10000
#define STEP_RESOLUTION_10M                                               600000

#define MODEL_TRANSITION_STOP                                               0X00

#define DEFAULT_RANDOM_DELAY_VALUE                                           300
#define PUBLISH_1SEC_TIME                                                   1000

typedef MOBLE_RESULT (*APPLI_SAVE_MODEL_STATE_CB)(MOBLEUINT8* stateBuff, MOBLEUINT16 size);
typedef MOBLE_RESULT (*APPLI_SAVE_MODEL_TEST_STATE_CB)(MOBLEUINT8* stateBuff, MOBLEUINT16 size);
typedef MOBLE_RESULT (*APPLI_RETRIEVE_MODEL_TEST_STATE_CB)(MOBLEUINT8* stateBuff, MOBLEUINT16 size);

/******************************************************************************/
/********** Following Section defines the SIG MODEL IDs            ************/
/******************************************************************************/
#define GENERIC_ONOFF_SERVER_MODEL_ID                                    0x1000U
#define GENERIC_ONOFF_CLIENT_MODEL_ID                                    0x1001U
#define GENERIC_LEVEL_SERVER_MODEL_ID                                    0x1002U
#define GENERIC_LEVEL_CLIENT_MODEL_ID                                    0x1003U
#define GENERIC_DEFAULT_TRANSITION_TIME_SERVER_MODEL_ID                  0x1004U
#define GENERIC_DEFAULT_TRANSITION_TIME_CLIENT_MODEL_ID                  0x1005U
#define GENERIC_POWER_ONOFF_SERVER_MODEL_ID                              0x1006U
#define GENERIC_POWER_ONOFF_SETUP_SERVER_MODEL_ID                        0x1007U
#define GENERIC_POWER_ONOFF_CLIENT_MODEL_ID                              0x1008U
#define GENERIC_POWER_LEVEL_SERVER_MODEL_ID                              0x1009U
#define GENERIC_POWER_LEVEL_SETUP_SERVER_MODEL_ID                        0x100AU
#define GENERIC_POWER_LEVEL_CLIENT_MODEL_ID                              0x100BU
#define GENERIC_BATTERY_SERVER_MODEL_ID                                  0x100CU
#define GENERIC_BATTERY_CLIENT_MODEL_ID                                  0x100DU
#define GENERIC_LOCATION_SERVER_MODEL_ID                                 0x100EU
#define GENERIC_LOCATION_SETUP_SERVER_MODEL_ID                           0x100FU
#define GENERIC_LOCATION_CLIENT_MODEL_ID                                 0x1010U
#define GENERIC_ADMIN_PROPERTY_SERVER_MODEL_ID                           0x1011U
#define GENERIC_MANUFACTURER_PROPERTY_SERVER_MODEL_ID                    0x1012U
#define GENERIC_USER_PROPERTY_SERVER_MODEL_ID                            0x1013U
#define GENERIC_CLIENT_PROPERTY_SERVER_MODEL_ID                          0x1014U

#define SENSOR_SERVER_MODEL_ID                                           0x1100U  
#define SENSOR_SETUP_SERVER_MODEL_ID                                     0x1101U
#define SENSOR_CLIENT_MODEL_ID                                           0x1102U  

#define TIME_MODEL_SERVER_MODEL_ID                                       0x1200U
#define TIME_MODEL_SETUP_SERVER_MODEL_ID                                 0x1201U
#define SCENE_MODEL_SERVER_MODEL_ID                                      0x1203U
#define SCENE_MODEL_SETUP_SERVER_MODEL_ID                                0x1204U

#define LIGHT_LIGHTNESS_SERVER_MODEL_ID                                  0x1300U
#define LIGHT_LIGHTNESS_SETUP_SERVER_MODEL_ID                            0x1301U
#define LIGHT_LIGHTNESS_CLIENT_MODEL_ID                                  0x1302U
#define LIGHT_CTL_SERVER_MODEL_ID                                        0x1303U
#define LIGHT_CTL_SETUP_SERVER_MODEL_ID                                  0x1304U
#define LIGHT_CTL_CLIENT_MODEL_ID                                        0x1305U
#define LIGHT_CTL_TEMPERATURE_SERVER_MODEL_ID                            0x1306U
#define LIGHT_HSL_SERVER_MODEL_ID                                        0x1307U
#define LIGHT_HSL_SETUP_SERVER_MODEL_ID                                  0x1308U
#define LIGHT_HSL_CLIENT_MODEL_ID                                        0x1309U
#define LIGHT_HSL_HUE_SERVER_MODEL_ID                                    0x130AU
#define LIGHT_HSL_SATURATION_SERVER_MODEL_ID                             0x130BU
#define LIGHT_XYL_SERVER_MODEL_ID                                        0x130CU
#define LIGHT_XYL_SETUP_SERVER_MODEL_ID                                  0x130DU
#define LIGHT_XYL_CLIENT_MODEL_ID                                        0x130EU
#define LIGHT_LC_SERVER_MODEL_ID                                         0x130FU
#define LIGHT_LC_SETUP_SERVER_MODEL_ID                                   0x1310U
#define LIGHT_LC_CLIENT_MODEL_ID                                         0x1311U

/* Sensor Server model opcode */
#define SENSOR_DESCRIPTOR_GET                                            0x8230U      
#define SENSOR_DESCRIPTOR_STATUS                                           0X51U
#define SENSOR_GET                                                       0X8231U
#define SENSOR_STATUS                                                      0X52U
#define SENSOR_COLUMN_GET                                                0X8232U
#define SENSOR_COLUMN_STATUS                                               0X53U
#define SENSOR_SERIES_GET                                                0X8233U
#define SENSOR_SERIES_STATUS                                               0X54U
/* Sensor Setup Server model opcode */                     
#define SENSOR_CADENCE_GET                                               0X8234U
#define SENSOR_CADENCE_SET                                                 0X55U
#define SENSOR_CADENCE_SET_UNACK                                           0X56U
#define SENSOR_CADENCE_STATUS                                              0X57U
#define SENSOR_SETTINGS_GET                                              0X8235U
#define SENSOR_SETTINGS_STATUS                                             0X58U
#define SENSOR_SETTING_GET                                               0X8236U
#define SENSOR_SETTING_SET                                                 0X59U
#define SENSOR_SETTING_SET_UNACK                                           0X5AU
#define SENSOR_SETTING_STATUS                                              0X5BU
/* Light LC Server model opcode */
#define LIGHT_LC_MODE_GET                                                0X8291U
#define LIGHT_LC_MODE_SET                                                0X8292U
#define LIGHT_LC_MODE_SET_UNACK                                          0X8293U
#define LIGHT_LC_MODE_STATUS                                             0X8294U
#define LIGHT_LC_OM_GET                                                  0X8295U
#define LIGHT_LC_OM_SET                                                  0X8296U
#define LIGHT_LC_OM_SET_UNACK                                            0X8297U
#define LIGHT_LC_OM_STATUS                                               0X8298U
#define LIGHT_LC_ON_OFF_GET                                              0X8299U
#define LIGHT_LC_ON_OFF_SET                                              0X829AU
#define LIGHT_LC_ON_OFF_SET_UNACK                                        0X829BU
#define LIGHT_LC_ON_OFF_STATUS                                           0X829CU
/* Light LC Setup server model opcode */
#define LIGHT_LC_PROPERTY_GET                                            0X829DU
#define LIGHT_LC_PROPERTY_SET                                              0X62U
#define LIGHT_LC_PROPERTY_SET_UNACK                                        0X63U
#define LIGHT_LC_PROPERTY_STATUS                                           0X64U

#define GENERIC_SERVER_MAIN_ELEMENT_INDEX            0
/* Element index of main element which supports Light Lightness Server
   and Light Lightness Linear is binded with Light LC Linear Out */
#define LIGHT_LIGHTNESS_SERVER_MAIN_ELEMENT_INDEX    0

              /* Mesh Device Properties and Property IDs  */
/* Temperature 8 In A Period Of Day */
#define AVERAGE_AMBIENT_TEMPERATURE_IN_A_PERIOD_OF_DAY_PID 	  	  0x0001
/* Average Current */
#define AVERAGE_INPUT_CURRENT_PID 	                        	  0x0002
/* Average_Voltage */
#define AVERAGE_INPUT_VOLTAGE_PID 	  	                          0x0003
/* Average Current */
#define AVERAGE_OUTPUT_CURRENT_PID 	  	                          0x0004
/* Average_Voltage */
#define AVERAGE_OUTPUT_VOLTAGE_PID 	  	                          0x0005
/* Luminous Intensity */
#define CENTER_BEAM_INTENSITY_AT_FULL_POWER _PID	  	          0x0006
/* Chromaticity Tolerance */
#define CHROMATICITY_TOLERANCE_PID 	  	                          0x0007
/* Cie 13.3-1995 Color Rendering Index */
#define COLOR_RENDERING_INDEX_R9_PID 	  	                          0x0008
/* Cie 13.3-1995 Color Rendering Index */
#define COLOR_RENDERING_INDEX_RA_PID 	  	                          0x0009
/* Gap.Appearance */
#define DEVICE_APPEARANCE_PID 	  	                                  0x000A
/* Country Code */
#define DEVICE_COUNTRY_OF_ORIGIN_PID 	                          	  0x000B
/* Date Utc */
#define DEVICE_DATE_OF_MANUFACTURE_PID 	                   	          0x000C
/* Energy */
#define DEVICE_ENERGY_USE_SINCE_TURN_ON_PID 	                  	  0x000D
/* Fixed_String 8 */
#define DEVICE_FIRMWARE_REVISION_PID 	                        	  0x000E
/* Global Trade Item_Number */
#define DEVICE_GLOBAL_TRADE_ITEM_NUMBER_PID 	                 	  0x000F
/* Fixed_String 16 */
#define DEVICE_HARDWARE_REVISION _PID	  	                          0x0010
/* Fixed_String 36 */
#define DEVICE_MANUFACTURER_NAME_PID 	                         	  0x0011
/* Fixed_String 24 */
#define DEVICE_MODEL_NUMBER_PID 	                        	  0x0012
/* Temperature Range */
#define DEVICE_OPERATING_TEMPERATURE_RANGE_SPECIFICATION_PID              0x0013
/* Temperature_Statistics */
#define DEVICE_OPERATING_TEMPERATURE_STATISTICAL_VALUES_PID               0x0014
/* Event_Statistics */
#define DEVICE_OVER_TEMPERATURE_EVENT_STATISTICS_PID                      0x0015
/* Power_Specification */
#define DEVICE_POWER_RANGE_SPECIFICATION_PID	                 	  0x0016
/* Time_Hour 24 */
#define DEVICE_RUNTIME_SINCE_TURN_ON_PID 	                 	  0x0017
/* Time_Hour 24 */
#define DEVICE_RUNTIME_WARRANTY_PID 	  	                          0x0018
/* Fixed_String 16 */
#define DEVICE_SERIAL_NUMBER_PID 	  	                          0x0019
/* Fixed_String 8 */
#define DEVICE_SOFTWARE_REVISION_PID 	  	                          0x001A
/* Event_Statistics */
#define DEVICE_UNDER_TEMPERATURE_EVENT_STATISTICS_PID	          	  0x001B
/* Temperature 8_Statistics */
#define INDOOR_AMBIENT_TEMPERATURE_STATISTICAL_VALUES_PID 	  	  0x001C
/* Chromaticity Coordinates */
#define INITIAL_CIE 1931_CHROMATICITY_COORDINATES_PID 	                  0x001D
/* Correlated Color Temperature */
#define INITIAL_CORRELATED_COLOR_TEMPERATURE_PID	  	          0x001E
/* Luminous_Flux */
#define INITIAL_LUMINOUS_FLUX_PID 	  	                          0x001F
/* Chromatic Distance_From_Planckian */
#define INITIAL_PLANCKIAN_DISTANCE_PID 	  	                          0x0020
/* Electric Current_Specification */
#define INPUT_CURRENT_RANGE_SPECIFICATION_PID	  	                  0x0021
/* Electric Current_Statistics */
#define INPUT_CURRENT_STATISTICS_PID 	  	                          0x0022
/* Event_Statistics */
#define INPUT_OVER_CURRENT_EVENT_STATISTICS_PID	  	                  0x0023
/* Event_Statistics */
#define INPUT_OVER_RIPPLE_VOLTAGE_EVENT_STATISTICS_PID	                  0x0024
/* Event_Statistics */
#define INPUT_OVER_VOLTAGE_EVENT_STATISTICS_PID	  	                  0x0025
/* Event_Statistics */
#define INPUT_UNDER_CURRENT_EVENT_STATISTICS_PID	           	  0x0026
/* Event_Statistics */
#define INPUT_UNDER_VOLTAGE_EVENT_STATISTICS_PID	          	  0x0027
/* Voltage_Specification */
#define INPUT_VOLTAGE_RANGE_SPECIFICATION_PID 	          	          0x0028
/* Percentage 8 */
#define INPUT_VOLTAGE_RIPPLE_SPECIFICATION_PID	  	                  0x0029
/* Voltage Statistics */
#define INPUT_VOLTAGE_STATISTICS_PID 	  	                          0x002A
/* Illuminance */
#define LIGHT_CONTROL_AMBIENT_LUXLEVEL_ON_PID	                  	  0x002B
/* Illuminance */
#define LIGHT_CONTROL_AMBIENT_LUXLEVEL_PROLONG_PID	         	  0x002C
/* Illuminance */
#define LIGHT_CONTROL_AMBIENT_LUXLEVEL_STANDBY_PID                        0x002D
/* Perceived_Lightness */
#define LIGHT_CONTROL_LIGHTNESS_ON_PID 	           	                  0x002E
/* Perceived_Lightness */
#define LIGHT_CONTROL_LIGHTNESS_PROLONG_PID 	                 	  0x002F
/* Perceived_Lightness */
#define LIGHT_CONTROL_LIGHTNESS_STANDBY_PID 	                 	  0x0030
/* Percentage 8 */
#define LIGHT_CONTROL_REGULATOR_ACCURACY_PID 	                 	  0x0031
/* Coefficient */
#define LIGHT_CONTROL_REGULATOR_KID_PID 	                 	  0x0032
/* Coefficient */                                                         
#define LIGHT_CONTROL_REGULATOR_KIU_PID 	                 	  0x0033
/* Coefficient */                                                         
#define LIGHT_CONTROL_REGULATOR_KPD_PID 	                 	  0x0034
/* Coefficient */                                                         
#define LIGHT_CONTROL_REGULATOR_KPU_PID 	                 	  0x0035
/* Time Millisecond 24 */                                                 
#define LIGHT_CONTROL_TIME_FADE_PID 	  	                          0x0036
/* Time Millisecond 24 */
#define LIGHT_CONTROL_TIME_FADE_ON_PID 	                                  0x0037
/* Time Millisecond 24 */
#define LIGHT_CONTROL_TIME_FADE_STANDBY_AUTO_PID	          	  0x0038
/* Time Millisecond 24 */                                                 
#define LIGHT_CONTROL_TIME_FADE_STANDBY_MANUAL_PID 	          	  0x0039
/* Time Millisecond 24 */
#define LIGHT_CONTROL_TIME_OCCUPANCY_DELAY_PID 	  	                  0x003A
/* Time Millisecond 24 */                                                 
#define LIGHT_CONTROL_TIME_PROLONG_PID 	         	                  0x003B
/* Time Millisecond 24 */
#define LIGHT_CONTROL_TIME_RUN_ON_PID 	  	                          0x003C
/* Percentage 8 */
#define LUMEN_MAINTENANCE_FACTOR_PID 	                             	  0x003D
/* Luminous_Efficacy */
#define LUMINOUS_EFFICACY_PID 	  	                                  0x003E
/* Luminous_Energy */
#define LUMINOUS_ENERGY_SINCE_TURN_ON_PID            	        	  0x003F
/* Luminous_Exposure */
#define LUMINOUS_EXPOSURE_PID 	  	                                  0x0040
/* Luminous_Flux Range */
#define LUMINOUS_FLUX_RANGE_PID 	                         	  0x0041
/* Percentage 8 */
#define MOTION_SENSED_PID 	  	                                  0x0042
/* Percentage 8 */                                                        
#define MOTION_THRESHOLD_PID 	  	                                  0x0043
/* Event_Statistics */
#define OPEN_CIRCUIT_EVENT_STATISTICS_PID      	          	          0x0044
/* Temperature 8_Statistics */
#define OUTDOOR_STATISTICAL_VALUES_PID 	                                  0x0045
/* Electric Current Range */
#define OUTPUT_CURRENT_RANGE_PID 	                              	  0x0046
/* Electric Current_Statistics */                                         
#define OUTPUT_CURRENT_STATISTICS_PID 	  	                          0x0047
/* Percentage 8 */
#define OUTPUT_RIPPLE_VOLTAGE_SPECIFICATION_PID	  	                  0x0048
/* Voltage_Specification */ 
#define OUTPUT_VOLTAGE_RANGE_PID                                          0x0049
/* Voltage_Statistics */
#define OUTPUT_VOLTAGE_STATISTICS_PID 	                    	          0x004A
/* Event_Statistics */
#define OVER_OUTPUT_RIPPLE_VOLTAGE_EVENT_STATISTICS_PID	                  0x004B
/* Count 16 */
#define PEOPLE_COUNT_PID 	                              	          0x004C
/* Boolean */                                                             
#define PRESENCE_DETECTED_PID 	                              	          0x004D
/* Illuminance */                                                         
#define PRESENT_AMBIENT_LIGHT_LEVEL_PID 	  	                  0x004E
/* Temperature 8 */                                                       
#define PRESENT_AMBIENT_TEMPERATURE_PID 	  	                  0x004F
/* Chromaticity Coordinates */
#define PRESENT_CIE 1931_CHROMATICITY_COORDINATES_PID 	                  0x0050
/* Correlated Color Temperature */
#define PRESENT_CORRELATED_COLOR_TEMPERATURE_PID	               	  0x0051
/* Power */
#define PRESENT_DEVICE_INPUT_POWER_PID 	  	                          0x0052
/* Percentage 8 */                                                        
#define PRESENT_DEVICE_OPERATING_EFFICIENCY_PID	               	          0x0053
/* Temperature */
#define PRESENT_DEVICE_OPERATING_TEMPERATURE_PID             	  	  0x0054
/* Illuminance */                                                         
#define PRESENT_ILLUMINANCE_PID 	  	                          0x0055
/* Temperature 8 */
#define PRESENT_INDOOR_AMBIENT_TEMPERATURE_PID	              	          0x0056
/* Electric Current */
#define PRESENT_INPUT_CURRENT_PID 	  	                          0x0057
/* Percentage 8 */                                                        
#define PRESENT_INPUT_RIPPLE_VOLTAGE_PID 	                 	  0x0058
/* Voltage */                                                             
#define PRESENT_INPUT_VOLTAGE_PID 	  	                          0x0059
/* Luminous_Flux */                                                       
#define PRESENT_LUMINOUS_FLUX_PID 	  	                          0x005A
/* Temperature 8 */
#define PRESENT_OUTDOOR_AMBIENT_TEMPERATURE_PID	           	          0x005B
/* Electric Current */
#define PRESENT_OUTPUT_CURRENT_PID 	  	                          0x005C
/* Voltage */                                                             
#define PRESENT_OUTPUT_VOLTAGE_PID 	                         	  0x005D
/* Chromatic Distance_From_Planckian */
#define PRESENT_PLANCKIAN_DISTANCE_PID                                    0x005E
/* Percentage 8 */
#define PRESENT_RELATIVE_OUTPUT_RIPPLE_VOLTAGE_PID          	          0x005F
/* Energy In_A_Period Of Day */                                           
#define RELATIVE_DEVICE_ENERGY_USE_IN_A_PERIOD_OF_DAY_PID	          0x0060
/* Relative Runtime In_A_Generic_Level Range */                           
#define RELATIVE_DEVICE_RUNTIME_IN_A_GENERIC_LEVEL_RANGE_PID	          0x0061
/* Relative_Value In_An Illuminance Range */                              
#define RELATIVE_EXPOSURE_TIME_IN_AN_ILLUMINANCE_RANGE_PID  	          0x0062
/* Luminous_Energy */
#define RELATIVE_RUNTIME_IN_A_CORRELATED_COLOR_TEMPERATURE_RANGE_PID      0x0063
/* Relative_Value In_A Temperature Range */                               
#define RELATIVE_RUNTIME_IN_A_DEVICE_OPERATING_TEMPERATURE_RANGE_PID      0x0064
/* Relative Runtime In_A Current Range */
#define RELATIVE_RUNTIME_IN_AN_INPUT_CURRENT_RANGE_PID 	    	          0x0065
/* Relative_Value In_A_Voltage Range */                                   
#define RELATIVE_RUNTIME_IN_AN_INPUT_VOLTAGE_RANGE_PID 	                  0x0066
/* Event_Statistics */
#define SHORT_CIRCUIT_EVENT_STATISTICS_PID 	         	          0x0067
/* Time_Second 16 */                                                      
#define TIME_SINCE_MOTION_SENSED_PID 	  	                          0x0068
/* Time Second 16 */                                                      
#define TIME_SINCE_PRESENCE_DETECTED_PID 	                      	  0x0069
/* Energy */                                                              
#define TOTAL_DEVICE_ENERGY_USE_PID 	  	                          0x006A
/* Count 24 */
#define TOTAL_DEVICE_OFF_ON_CYCLES_PID 	  	                          0x006B
/* Count 24 */ 
#define TOTAL_DEVICE_POWER_ON_CYCLES_PID 	                      	  0x006C
/* Time_Hour 24 */
#define TOTAL_DEVICE_POWER_ON_TIME_PID 	  	                          0x006D
/* Time_Hour 24 */
#define TOTAL_DEVICE_RUNTIME_PID 	  	                          0x006E
/* Time_Hour 24 */                                                        
#define TOTAL_LIGHT_EXPOSURE_TIME_PID 	  	                          0x006F
/* Luminous_Energy */                                                     
#define TOTAL_LUMINOUS_ENERGY_PID 	  	                          0x0070
/* Temperature 8 */                                                       
#define DESIRED_AMBIENT_TEMPERATURE_PID 	 	                  0x0071

#define PRESSURE_PID                                                      0x2A6D
#define HUMIDITY_PID                                                      0x2A6F
#define TIME_OF_FLIGHT_PID                                                0X2A7F
#define MAGNETO_METER_PID                                                 0x2AA1
#define ACCELERO_METER_PID                                                0x2BA1
#define GYROSCOPE_PID                                                     0x2BA2
#define VOLTAGE_PID                                                       0x0005
#define CURRENT_PID                                                       0x0004
#define POWER_FACTOR_PID                                                  0x0072
#define ACTIVE_POWER_PID                                                  0x0073
#define REACTIVE_POWER_PID                                                0x0074
#define APPARENT_POWER_PID                                                0x0075
#define ACTIVE_ENERGY_PID                                                 0x0083
#define REACTIVE_ENERGY_PID                                               0x0084
#define APPARENT_ENERGY_PID                                               0x0085

#define PROPERTY_ID_LENGTH                                                     2

#define ONE_BYTE_VALUE                                                         1
#define TWO_BYTE_VALUE                                                         2
#define THREE_BYTE_VALUE                                                       3
#define FOUR_BYTE_VALUE                                                        4

#define PROPERTY_ID_PROHIBITED                                            0x0000


/** @addtogroup MODEL_GENERIC
*  @{
*/

/** @addtogroup Generic_Model_Callbacks
*  @{
*/

/* Exported types ------------------------------------------------------------*/


/**
  * transition status enum
 */
typedef enum
{
  TRANSITION_STATUS_STOP = 0,
  TRANSITION_STATUS_DELAY,
  TRANSITION_STATUS_RUNNING
}transition_status_e;


/**
  * transition parameters struct
 */
typedef struct
{
  MOBLEUINT32 stepResolutionMs;
  MOBLEUINT32 trTimeMs;
  MOBLEUINT32 trBeginTick;
  MOBLEUINT32 trEndTick;
  MOBLEUINT32 trNextActionTick;
  transition_status_e trStatus;
  MOBLEUINT8 publishEventTrig;
  MOBLEUINT8 res[2];
} transition_params_t;


/**
  * status send (in reply to get, set & setunack messages) enum
 */
typedef enum
{
  STATUS_SEND_REPLY = 0,
  STATUS_SEND_PUBLISH,
  STATUS_SEND_REPLY_PUBLISH
} status_send_e;


/**
  * transition event enum
 */
typedef enum
{
  TRANSITION_EVENT_NO = 0,
  TRANSITION_EVENT_ABORT,
  TRANSITION_EVENT_DELAY,
  TRANSITION_EVENT_TIMER_START,
  TRANSITION_EVENT_TIMER_TRIG,
  TRANSITION_EVENT_PUBLISH,
  TRANSITION_EVENT_TIMER_STOP
}transition_event_e;


/**
  * Model tid value structure
 */
typedef struct
{
  MOBLEUINT8 Tid_Value;
  MOBLEUINT8 TidSend;
  MOBLE_ADDRESS Peer_Addrs;
  MOBLE_ADDRESS Dst_Addrs;
}Model_Tid_t;


/**
  * TID params struct
 */
typedef struct
{
  MOBLEUINT32 tidTick;
  MOBLE_ADDRESS src;
  MOBLE_ADDRESS dst;
  MOBLEUINT8 tid;
  MOBLEUINT8 res[3];
}tid_param_t;


/**
  * variable used for binding status
 */
typedef struct
{
  MOBLEUINT16 Model_Rx_Opcode;  
  MOBLEUINT16 Model_ID;
  MOBLE_ADDRESS Dst_Peer;
}Model_Binding_Var_t;

typedef struct
{
  MOBLEUINT8 Restore_Flag;
  MOBLEUINT8 LightTransitionStatus;
  MOBLEUINT8 GenericTransitionStatus;
  MOBLEUINT8 PowerOnOff;
#ifdef ENABLE_GENERIC_MODEL_SERVER_ONOFF  
  MOBLEUINT8 Generic_OnOff; 
  MOBLEUINT8 GenericTarget;
#endif

#ifdef ENABLE_GENERIC_MODEL_SERVER_LEVEL  
  MOBLEUINT16 Generic_Level;
#endif
  
#ifdef ENABLE_LIGHT_MODEL_SERVER_LIGHTNESS
  MOBLEUINT16 LightLightness;
  MOBLEUINT16 LightTarget;
  MOBLEUINT16 LightDefault;
  MOBLEUINT16 LightLast;
#endif

#ifdef ENABLE_LIGHT_MODEL_SERVER_CTL
  MOBLEUINT16 CtlLightness;
  MOBLEUINT16 CtlTemperature;
  MOBLEUINT16 CtlDelta;
  MOBLEUINT16 CtlDefaultLightness;
  MOBLEUINT16 CtlDefaultTemperature;
  MOBLEUINT16 CtlDefaultDelta;
  MOBLEUINT16 CtlLightTarget;
  MOBLEUINT16 CtlTempTarget;
  MOBLEUINT16 CtlDeltaTarget;
  
#endif  

#ifdef ENABLE_LIGHT_MODEL_SERVER_HSL
  MOBLEUINT16 HslLightness;
  MOBLEUINT16 HslHue;
  MOBLEUINT16 HslSaturation; 
  MOBLEUINT16 HslLightnessDefault;
  MOBLEUINT16 HslHueDefault;
  MOBLEUINT16 HslSaturationDefault;
  MOBLEUINT16 HslLightTarget;
  MOBLEUINT16 HslHueTarget;
  MOBLEUINT16 HslSatTarget;
#endif  
  
#ifdef ENABLE_LIGHT_MODEL_SERVER_LC 
  MOBLEUINT8 LightLCBuff[APP_NVM_LIGHT_LC_MODEL_SIZE]; 
#endif

}Models_ParamNvm_t;
/* Exported functions ------------------------------------------------------- */
MOBLE_RESULT Chk_OptionalParamValidity(MOBLEUINT8 param_length, MOBLEUINT8
                                        mandatory_length, MOBLEUINT8 param,
                                                  MOBLEUINT8 max_param_value  );
MOBLE_RESULT Chk_ParamMinMaxValidity(MOBLEUINT16 min_param_value, 
                                                 const MOBLEUINT8* param,
                                                 MOBLEUINT16 max_param_value );

MOBLE_RESULT Chk_ParamValidity(MOBLEUINT8 param, MOBLEUINT8 max_param_val );
 
MOBLE_RESULT Chk_RangeValidity(MOBLEUINT16 min_param_value, const MOBLEUINT8* param, 
                                                     MOBLEUINT16 max_param_value );
MOBLE_RESULT  Chk_HslRangeValidity(const MOBLEUINT8* param,MOBLEUINT16 min_param_value_1, 
                                   MOBLEUINT16 max_param_value_1,MOBLEUINT16 min_param_value_2,
                                     MOBLEUINT16 max_param_value_2);
MOBLE_RESULT  Chk_TwoParamValidity(MOBLEUINT16 min_param_range1, MOBLEUINT16 max_param_range1,                                        
                                      MOBLEUINT16 min_param_range2, MOBLEUINT16 max_param_range2,
                                        const MOBLEUINT8* param);
MOBLE_RESULT  Chk_MultiParamValidity(MOBLEUINT16 min_param_range1, MOBLEUINT16 max_param_range1,                                        
                                      MOBLEUINT16 min_param_range2, MOBLEUINT16 max_param_range2,
                                      MOBLEINT16 min_param_range3, MOBLEUINT16 max_param_range3,
                                        const MOBLEUINT8* param);
MOBLE_RESULT  Chk_MultiParamValidityAllUnsigned(MOBLEUINT16 min_param_range1, MOBLEUINT16 max_param_range1,                                        
                                      MOBLEUINT16 min_param_range2, MOBLEUINT16 max_param_range2,
                                      MOBLEINT16 min_param_range3, MOBLEUINT16 max_param_range3,
                                        const MOBLEUINT8* param);
MOBLE_RESULT Chk_ParamMinMaxIntValidity(MOBLEINT16 min_param_value, const MOBLEUINT8* param, 
                                                     MOBLEINT16 max_param_value );
MOBLE_RESULT Chk_TidValidity(MOBLE_ADDRESS peer_Addrs,MOBLE_ADDRESS dst_Addrs,MOBLEUINT8 tidValue);
MOBLEUINT8 Tid_CheckAndUpdate(MOBLEUINT8 currentMsgTid,
                             MOBLE_ADDRESS currentMsgSrc,
                             MOBLE_ADDRESS currentMsgDst,
                             tid_param_t* pLastMsgTidParams);
MOBLE_RESULT TimeDttFGet(MOBLEUINT32 timeMs, MOBLEUINT8* timeDttF);
MOBLEUINT32 Get_StepResolutionValue(MOBLEUINT8 time_param);

float Ratio_CalculateValue(MOBLEUINT16 setValue , MOBLEUINT16 maxRange , MOBLEINT16 minRange);
void TraceHeader(const char* func_name, int mode);
#ifdef ENABLE_SAVE_MODEL_STATE_NVM
MOBLE_RESULT SaveModelsStateNvm(MOBLEUINT8* flag);
#endif
MOBLEUINT8 BLE_GetElementNumber(void);

void Test_Process(void);
void ModelSave_Process(void);
void BLEMesh_PacketResponseTime(MOBLEUINT8 *testFunctionParm);
MOBLEUINT8 Time_Conversion(MOBLEUINT32 lc_Time);
void Model_RestoreStates(MOBLEUINT8 const *pModelState_Load, MOBLEUINT8 size);

void Generic_OnOffPowerOnValue(Models_ParamNvm_t *state_Value, MODEL_MessageHeader_t *pmsgParam);
MOBLEUINT16 Light_lightnessPowerOnValue(Models_ParamNvm_t *state_Value, MODEL_MessageHeader_t *pmsgParam);                                       
void Light_CtlPowerOnValue(Models_ParamNvm_t *state_Value, MODEL_MessageHeader_t *pmsgParam);
void Light_HslPowerOnValue(Models_ParamNvm_t *state_Value, MODEL_MessageHeader_t *pmsgParam);

void MemoryDumpHex(const MOBLEUINT8* memory_addr, int size);
void PutLittleEndian(MOBLEUINT8* stream, MOBLEUINT32 value, MOBLEUINT8 octets);
void GetLittleEndian(MOBLEUINT8 const *stream, MOBLEUINT8 octets, MOBLEUINT32* result);

void CopyU8LittleEndienArray_fromU16word (MOBLEUINT8* pArray, MOBLEUINT16 inputWord);
void CopyU8LittleEndienArray_fromU32word (MOBLEUINT8* pArray, MOBLEUINT32 inputWord);
void CopyU8LittleEndienArray_2B_fromU32word (MOBLEUINT8* pArray, MOBLEUINT32 inputWord);
MOBLEUINT16 CopyU8LittleEndienArrayToU16word (MOBLEUINT8* pArray);
MOBLEUINT32 CopyU8LittleEndienArrayToU32word (MOBLEUINT8* pArray);
void NvmStatePowerFlag_Set(MOBLEUINT8 nvmModelFlag, MOBLEUINT8 elementIndex);
#if 0 //#ifdef ENABLE_NVM_TEST
void Device_FlashTesting(void);
#endif
transition_event_e Transition_Stop(transition_status_e* status);
transition_event_e Transition_Sm(transition_params_t* transitionParams,
                                MOBLEUINT32 delayMs);
MOBLEUINT32 Transition_RemainingTimeGet(transition_params_t* transitionParams);
MOBLEUINT32 Transition_TimerGet(transition_params_t* pTrParams);
MOBLEUINT32 Transition_TimeToNextActionGet(transition_params_t* pTrParams);
MOBLEUINT32 Transition_StateValueGet(MOBLEUINT32 finalState, 
                                    MOBLEUINT32 initialState, 
                                    MOBLEUINT32 timer, 
                                    MOBLEUINT32 transitionTime);
MOBLE_RESULT ExtractPropertyId(const MOBLEUINT8* data,
                                      MOBLEUINT16* pPropertyId);
MOBLE_RESULT Binding_GenericOnOff_LightLcLightOnOff(MOBLEUINT8 genericElementIndex, 
                                                    MOBLEUINT8 genericOnOff,
                                                    MOBLEUINT8 optionalParams,
                                                    MOBLEUINT32 delayMs,
                                                    MOBLEUINT8 transitionParam);
MOBLE_RESULT Binding_LightLcLightOnOff_GenericOnOff(MOBLEUINT8 lcElementIndex, MOBLEUINT8 lcOnOff);
MOBLE_RESULT Binding_LcLinearOut_LightLightnessLinear(MOBLEUINT8 lcElementIndex, MOBLEUINT16 lcLinearOut);
void BindingDisable_LcLinearOut_LightLightnessLinear(MOBLEUINT8 lightnessLinearElementIndex);
MOBLEBOOL Wait_RandomTime(void);

#endif /* __COMMON_H */

/******************* (C) COPYRIGHT 2017 STMicroelectronics *****END OF FILE****/