DMM API Reference  3.20.00.07
dmm_policy.h
Go to the documentation of this file.
1 /******************************************************************************
2 
3  @file dmm_policy.h
4 
5  @brief dmm policy Header
6 
7  Group: WCS LPC
8  $Target Device: DEVICES $
9 
10  ******************************************************************************
11  $License: TISD 2019 $
12  ******************************************************************************
13  $Release Name: PACKAGE NAME $
14  $Release Date: PACKAGE RELEASE DATE $
15  *****************************************************************************/
16 /*!****************************************************************************
17  * @file dmm_policy.h
18  *
19  * @brief Dual Mode Policy Manager
20  *
21  * The DMMPolicy interface provides a service to for the stack applications to
22  * update the priority of the stack activities, which is then used to make scheduling decisions.
23  *
24  * # Fields in the Policy Table #
25  * .state: the name of the application state
26  * .weight: amount of adjusted priority for stack activities specified in .appliedActivity
27  * .timingConstraint: reserved for future usage
28  * .pause: whether or not the specified stack's application is paused during the state
29  * .appliedActivity: Specified the activities of which priority is/are adjusted by .weight
30  * - Final Priority = GPT (Stack level priority) + weight (Application Level)
31  * .balancedMode: Switch the .weight value between the two stacks based on the time information specified
32  *
33  * # Usage #
34  *
35  * To use the DMMPolicy module to set the scheduling policy, the application
36  * calls the following APIs:
37  * - DMMPolicy_init(): Initialize the DMMPolicy module/task.
38  * - DMMPolicy_Params_init(): Initialize a DMMPolicy_Params structure
39  * with default values. Then change the parameters from non-default
40  * values as needed.
41  * - DMMPolicy_open(): Open an instance of the DMMPolicy module,
42  * passing the initialized parameters.
43  * - Stack A/B application - DMMPolicy_updateApplicationState: Update the application state.
44  * The Policy Manager finds the matching policy that is used
45  * when scheduling RF commands from stack A and B.
46  *
47  * An example of a policy table (define in ti_dmm_application_policy.c, which is generated by SysConfig)
48  *
49  * \code
50  * DMMPolicy_Policy DMMPolicy_ApplicationPolicy[] = {
51  * // DMM Policy 0
52  * {
53  * // BLE Peripheral Policy
54  * .appState[BLE_STACK_POLICY_IDX] = {
55  * .state = DMMPOLICY_BLE_OAD,
56  * .weight = 25,
57  * .timingConstraint = DMMPOLICY_TIME_RESERVED,
58  * .pause = DMMPOLICY_NOT_PAUSED,
59  * .appliedActivity = DMMPOLICY_APPLIED_ACTIVITY_BLE_CONNECTION,
60  * (note: the priority of BLE connection event is increased by .weight (25) during BLE_OAD)
61  * },
62  * // 15.4 Collector Policy
63  * .appState[TI154_STACK_POLICY_IDX] = {
64  * .state = ANY,
65  * .weight = 0,
66  * .timingConstraint = DMMPOLICY_TIME_RESERVED,
67  * .pause = DMMPOLICY_PAUSED,
68  * .appliedActivity = DMMPOLICY_APPLIED_ACTIVITY_NONE,
69  * },
70  * //Balanced Mode Policy
71  * .balancedMode = DMMPOLICY_BALANCED_NONE,
72  * },
73  * // DMM Policy 1
74  * {
75  * // BLE Peripheral Policy
76  * .appState[BLE_STACK_POLICY_IDX] = {
77  * .state = DMMPOLICY_BLE_HIGH_BANDWIDTH,
78  * .weight = 25,
79  * .timingConstraint = DMMPOLICY_TIME_RESERVED,
80  * .pause = DMMPOLICY_NOT_PAUSED,
81  * .appliedActivity = DMMPOLICY_APPLIED_ACTIVITY_BLE_CONNECTION,
82  * (note: the priority of BLE connection event is increased by .weight (25) during BLE_HIGH_BANDWIDTH)
83  * },
84  * // 15.4 Collector Policy
85  * .appState[TI154_STACK_POLICY_IDX] = {
86  * .state = ANY,
87  * .weight = 0,
88  * .timingConstraint = DMMPOLICY_TIME_RESERVED,
89  * .pause = DMMPOLICY_NOT_PAUSED,
90  * .appliedActivity = DMMPOLICY_APPLIED_ACTIVITY_NONE,
91  * },
92  * //Balanced Mode Policy
93  * .balancedMode = DMMPOLICY_BALANCED_NONE,
94  * },
95  * // DMM Policy 2 (The last policy indicates the default priority of the two stacks)
96  * {
97  * // BLE Peripheral Policy
98  * .appState[BLE_STACK_POLICY_IDX] = {
99  * .state = ANY,
100  * .weight = 0,
101  * .timingConstraint = DMMPOLICY_TIME_RESERVED,
102  * .pause = DMMPOLICY_NOT_PAUSED,
103  * .appliedActivity = DMMPOLICY_APPLIED_ACTIVITY_NONE,
104  * },
105  * // 15.4 Collector Policy
106  * .appState[TI154_STACK_POLICY_IDX] = {
107  * .state = ANY,
108  * .weight = 1,
109  * .timingConstraint = DMMPOLICY_TIME_RESERVED,
110  * .pause = DMMPOLICY_NOT_PAUSED,
111  * .appliedActivity = DMMPOLICY_APPLIED_ACTIVITY_NONE,
112  * },
113  * //Balanced Mode Policy
114  * .balancedMode = DMMPOLICY_BALANCED_NONE,
115  * },
116  *};
117  *
118  *DMMPolicy_PolicyTable DMMPolicy_ApplicationPolicyTable = {
119  * //Stack Roles
120  * .stackRole[BLE_STACK_POLICY_IDX] = DMMPolicy_StackRole_BlePeripheral,
121  * .stackRole[TI154_STACK_POLICY_IDX] = DMMPolicy_StackRole_154Sensor,
122  * //Policy table
123  * .policy = DMMPolicy_ApplicationPolicy,
124  * // Index Table for future use
125  * .indexTable = NULL,
126  *};
127  *
128  * //! \brief The application policy table size
129  * uint32_t DMMPolicy_ApplicationPolicySize = (sizeof(DMMPolicy_ApplicationPolicy) / sizeof(DMMPolicy_Policy));
130  *
131  * \endcode
132  *
133  *********************************************************************************/
134 
135 #ifndef DMMPolicy_H_
136 #define DMMPolicy_H_
137 
138 #ifdef __cplusplus
139 extern "C" {
140 #endif
141 
142 #include "stdint.h"
143 #include <ti/drivers/rf/RF.h>
144 
145 
147 #define BLE_STACK_POLICY_IDX 0
148 
149 
156 #define DMMPOLICY_NUM_STACKS 2
157 
158 #define DMMPOLICY_PRIORITY_LOW 0
159 #define DMMPOLICY_PRIORITY_HIGH 1
160 
161 #define DMMPOLICY_TIME_NONE_CRITICAL 0
162 #define DMMPOLICY_TIME_CRITICAL 1
163 #define DMMPOLICY_TIME_RESERVED 1
164 
165 #define DMMPOLICY_NOT_PAUSED 0
166 #define DMMPOLICY_PAUSED 0x0001
167 #define DMMPOLICY_SCHEDULE_BLOCKED 0x0002
168 
169 #define DMMPOLICY_BALANCED_NONE 0
170 
171 #define DMMPOLICY_BALANCED_TIME_BM_1 0x80000000
172 #define DMMPOLICY_BALANCED_TIME_MODE_1(onMin, offMax) (DMMPOLICY_BALANCED_TIME_BM_1 | (onMin & 0xFFF) | ((offMax & 0xFFF) << 12))
173 #define DMMPOLICY_BALANCED_TIME_MODE_1_ON_MIN(RatioTime) (RatioTime & 0xFFF)
174 #define DMMPOLICY_BALANCED_TIME_MODE_1_OFF_MAX(RatioTime) ((RatioTime & 0xFFF000) >> 12)
175 
176 #define DMMPOLICY_APPLIED_ACTIVITY_NONE 0
177 #define DMMPOLICY_APPLIED_ACTIVITY_ALL 0xFFFF
178 #define DMMPOLICY_APPLIED_ACTIVITY_BLE_CONNECTION 0x0001
179 #define DMMPOLICY_APPLIED_ACTIVITY_BLE_LINK_EST 0x0002
180 #define DMMPOLICY_APPLIED_ACTIVITY_BLE_BROADCASTING 0x0004
181 #define DMMPOLICY_APPLIED_ACTIVITY_BLE_OBSERVING 0x0008
182 
183 #define DMMPOLICY_APPLIED_ACTIVITY_154_DATA 0x0001
184 #define DMMPOLICY_APPLIED_ACTIVITY_154_LINK_EST 0x0002
185 #define DMMPOLICY_APPLIED_ACTIVITY_154_TX_BEACON 0x0004
186 #define DMMPOLICY_APPLIED_ACTIVITY_154_RX_BEACON 0x0008
187 #define DMMPOLICY_APPLIED_ACTIVITY_154_FH 0x0010
188 #define DMMPOLICY_APPLIED_ACTIVITY_154_SCAN 0x0020
189 #define DMMPOLICY_APPLIED_ACTIVITY_154_RXON 0x0040
190 
191 #define DMMPOLICY_APPLIED_ACTIVITY_WSN_RETRANSMIT 0x0001
192 #define DMMPOLICY_APPLIED_ACTIVITY_WSN_TRANSMIT 0x0002
193 #define DMMPOLICY_APPLIED_ACTIVITY_WSN_RECEIVE 0x0004
194 
195 
197 #define PRIORITY_NUM 3
199 
200 #define DMMPolicy_updateStackState DMMPolicy_updateApplicationState
202 
210 #define DMM_PRIORITY_MAX_LIMIT 250
211 #define DMM_PRIORITY_MAX_CHANGE_LIMIT 185
212 
214 #define DMM_GLOBAL_PRIORITY(activity, level, weight) {(activity << 16 | level), weight}
216 
217 typedef enum
219 {
231 
233 typedef struct
234 {
235  uint32_t state;
236  uint8_t weight;
237  uint16_t timingConstraint;
238  uint32_t appliedActivity;
239  uint16_t pause;
242 
244 typedef struct
245 {
247  uint32_t balancedMode;
249 
251 typedef struct
252 {
253  uint8_t *CmdIndex;
254  uint8_t tableSize;
256 
258 typedef struct
259 {
260  DMMPolicy_StackRole stackRole[DMMPOLICY_NUM_STACKS];
264 
266 typedef struct {
267  uint32_t activity;
268  uint16_t globalPriority;
269 } StackActivity;
270 
272 typedef enum
273 {
277 } PriorityDef;
278 
280 typedef struct {
282  uint8_t tableSize;
283  DMMPolicy_StackRole stackRole;
284 } GlobalTable;
285 
287 typedef struct {
288  uint32_t stackID;
289  uint8_t currentWeight;
290  uint8_t defaultPriority;
292 
296 typedef struct {
302 
307 typedef enum {
313 
315 typedef void (*DMMPolicy_appPauseCb_t)(uint16_t pause);
316 
318 typedef struct
319 {
322 
328 extern void DMMPolicy_Params_init(DMMPolicy_Params *params);
329 
335 extern void DMMPolicy_registerAppCbs(DMMPolicy_AppCbs_t AppCbs, DMMPolicy_StackRole StackRole);
336 
340 extern void DMMPolicy_init(void);
341 
348 extern DMMPolicy_Status DMMPolicy_open(DMMPolicy_Params *params);
349 
357 extern DMMPolicy_Status DMMPolicy_updateApplicationState(DMMPolicy_StackRole StackRole, uint32_t newState);
358 
366 extern uint16_t DMMPolicy_getGlobalPriority (uint32_t activity, uint32_t stackID);
367 
374 extern uint8_t DMMPolicy_getDefaultPriority (uint32_t stackID);
375 
383 extern void DMMPolicy_setStackID (uint32_t stackID, DMMPolicy_StackRole StackRole);
384 
391 extern uint16_t DMMPolicy_getPauseValue (uint32_t stackID);
392 
399 extern uint16_t DMMPolicy_getTimeConstraintValue (uint32_t stackID);
400 
405 extern bool DMMPolicy_getGPTStatus (void);
406 
412 bool DMMPolicy_setBlockModeOn(DMMPolicy_StackRole StackRole);
413 
419 bool DMMPolicy_setBlockModeOff(DMMPolicy_StackRole StackRole);
420 
427 bool DMMPolicy_getBlockModeStatus(DMMPolicy_StackRole StackRole);
428 
429 #ifdef __cplusplus
430 }
431 #endif
432 
433 #endif /* DMMPolicy_H_ */
void DMMPolicy_Params_init(DMMPolicy_Params *params)
Function to initialize the DMMPolicy_Params struct to its defaults.
bool DMMPolicy_getGPTStatus(void)
check if the global priority table is available
GlobalTable * globalPriorityTable
global priority table to be used for the DMM use case
Definition: dmm_policy.h:299
void DMMPolicy_registerAppCbs(DMMPolicy_AppCbs_t AppCbs, DMMPolicy_StackRole StackRole)
Register the application policy callbacks.
stack role reserved for a customers proprietary stack
Definition: dmm_policy.h:229
Normal priority.
Definition: dmm_policy.h:274
uint8_t defaultPriority
The default priority of the policy.
Definition: dmm_policy.h:290
uint8_t DMMPolicy_getDefaultPriority(uint32_t stackID)
Get the default priority.
Global Priority Table data struct.
Definition: dmm_policy.h:280
DMMPolicy_appPauseCb_t appPauseCb
Callback function when app in paused state.
Definition: dmm_policy.h:320
Error with policy table.
Definition: dmm_policy.h:309
Structure for app callbacks.
Definition: dmm_policy.h:318
uint16_t DMMPolicy_getGlobalPriority(uint32_t activity, uint32_t stackID)
Get the global activity based on stack activity.
uint32_t appliedActivity
Definition: dmm_policy.h:238
uint32_t stackID
ID to define the stack using current policy.
Definition: dmm_policy.h:288
Structure used to decide the policy for a particular stack state.
Definition: dmm_policy.h:244
DMMPolicy_Status DMMPolicy_open(DMMPolicy_Params *params)
Function to open the DMMPolicy module.
Structure used to define a DMM Policy.
Definition: dmm_policy.h:233
uint16_t timingConstraint
reserved for future usage
Definition: dmm_policy.h:237
uint32_t state
application state of a policy
Definition: dmm_policy.h:235
void DMMPolicy_setStackID(uint32_t stackID, DMMPolicy_StackRole StackRole)
Get the global activity based on stack activity.
uint32_t numPolicyTableEntries
entries in policy table
Definition: dmm_policy.h:298
invalid stack role
Definition: dmm_policy.h:220
uint32_t activity
stack command activity
Definition: dmm_policy.h:267
stack role for a 15.4 Collector
Definition: dmm_policy.h:224
uint8_t tableSize
Size of the table.
Definition: dmm_policy.h:254
bool DMMPolicy_setBlockModeOff(DMMPolicy_StackRole StackRole)
Turn off Block mode.
uint16_t DMMPolicy_getPauseValue(uint32_t stackID)
Get the pause value from the current policy.
StackActivity * globalTableArray
global table array
Definition: dmm_policy.h:281
policy table entry
Definition: dmm_policy.h:258
Policy Information dynamically updated.
Definition: dmm_policy.h:287
DMMPolicy_StackCmdIndexTable * indexTable
reserved for future use
Definition: dmm_policy.h:262
void DMMPolicy_init(void)
Function that initializes the DMMPolicy module.
Structure used to define a stack command index table. Reserved for future usage.
Definition: dmm_policy.h:251
Parameter Error.
Definition: dmm_policy.h:310
stack role for an EasyLink Wireless Sensor Network Node
Definition: dmm_policy.h:222
DMMPolicy_StackRole
the stack roles supported
Definition: dmm_policy.h:218
bool DMMPolicy_getBlockModeStatus(DMMPolicy_StackRole StackRole)
Get Block mode status.
#define DMMPOLICY_NUM_STACKS
Number of RF driver clients supported.
Definition: dmm_policy.h:156
High priority.
Definition: dmm_policy.h:275
uint16_t DMMPolicy_getTimeConstraintValue(uint32_t stackID)
Get the time constraint value from the current policy.
Stack Activity data struct.
Definition: dmm_policy.h:266
uint8_t currentWeight
The current weight value of the policy.
Definition: dmm_policy.h:289
uint8_t weight
amount of adjusted priority for stack activities specified in .appliedActivity
Definition: dmm_policy.h:236
stack role reserved for a customers proprietary stack
Definition: dmm_policy.h:228
uint32_t balancedMode
0x0 = no ratio mode, 0x0000xxyy = stack 1:stack 2 = xx:yy, 0x80xxxyyy = Hi Pri Stack xxx ms min on yy...
Definition: dmm_policy.h:247
DMMPolicy_Status
Status codes for various DMM Policy functions.
Definition: dmm_policy.h:307
DMMPolicy_Status DMMPolicy_updateApplicationState(DMMPolicy_StackRole StackRole, uint32_t newState)
Updates the policy used to make scheduling decisions.
DMMPolicy_PolicyTable policyTable
policy table to be used for the DMM use case
Definition: dmm_policy.h:297
Urgent priority.
Definition: dmm_policy.h:276
stack role for a BLE Simple Peripheral
Definition: dmm_policy.h:221
uint16_t globalPriority
stack command priority
Definition: dmm_policy.h:268
Error.
Definition: dmm_policy.h:308
uint8_t tableSize
size of the table
Definition: dmm_policy.h:282
stack role for a Zigbee Router
Definition: dmm_policy.h:226
PriorityDef
Stack Activity Priority.
Definition: dmm_policy.h:272
stack role for a 15.4 Sensor
Definition: dmm_policy.h:223
uint8_t * CmdIndex
Command table.
Definition: dmm_policy.h:253
Function finished with success.
Definition: dmm_policy.h:311
stack role for a Zigbee End Device
Definition: dmm_policy.h:225
RF parameter struct DMM Scheduler parameters are used with the DMMPolicy_open() and DMMPolicy_Params_...
Definition: dmm_policy.h:296
void(* DMMPolicy_appPauseCb_t)(uint16_t pause)
Callback function type for app pause/reseume.
Definition: dmm_policy.h:315
DMMPolicy_Policy * policy
pointer to the policy
Definition: dmm_policy.h:261
bool DMMPolicy_setBlockModeOn(DMMPolicy_StackRole StackRole)
Turn on Block mode.
DMMPolicy_StackRole stackRole
stack application role
Definition: dmm_policy.h:283
stack role for a Zigbee Coordinator
Definition: dmm_policy.h:227