aboutsummaryrefslogtreecommitdiff
path: root/lib/chibios-contrib/ext/mcux-sdk/devices/MKE02Z4/utilities/fsl_notifier.h
diff options
context:
space:
mode:
Diffstat (limited to 'lib/chibios-contrib/ext/mcux-sdk/devices/MKE02Z4/utilities/fsl_notifier.h')
-rw-r--r--lib/chibios-contrib/ext/mcux-sdk/devices/MKE02Z4/utilities/fsl_notifier.h237
1 files changed, 237 insertions, 0 deletions
diff --git a/lib/chibios-contrib/ext/mcux-sdk/devices/MKE02Z4/utilities/fsl_notifier.h b/lib/chibios-contrib/ext/mcux-sdk/devices/MKE02Z4/utilities/fsl_notifier.h
new file mode 100644
index 000000000..d93578c13
--- /dev/null
+++ b/lib/chibios-contrib/ext/mcux-sdk/devices/MKE02Z4/utilities/fsl_notifier.h
@@ -0,0 +1,237 @@
1/*
2 * Copyright (c) 2015, Freescale Semiconductor, Inc.
3 * Copyright 2016-2017 NXP
4 * All rights reserved.
5 *
6 * SPDX-License-Identifier: BSD-3-Clause
7 */
8
9#ifndef _FSL_NOTIFIER_H_
10#define _FSL_NOTIFIER_H_
11
12#include "fsl_common.h"
13/*!
14 * @addtogroup notifier
15 * @{
16 */
17
18/*******************************************************************************
19 * Definitions
20 ******************************************************************************/
21
22/*!
23 * @brief Notifier error codes.
24 *
25 * Used as return value of Notifier functions.
26 */
27enum _notifier_status
28{
29 kStatus_NOTIFIER_ErrorNotificationBefore =
30 MAKE_STATUS(kStatusGroup_NOTIFIER, 0), /*!< An error occurs during send "BEFORE" notification. */
31 kStatus_NOTIFIER_ErrorNotificationAfter =
32 MAKE_STATUS(kStatusGroup_NOTIFIER, 1), /*!< An error occurs during send "AFTER" notification. */
33};
34
35/*!
36 * @brief Notifier policies.
37 *
38 * Defines whether the user function execution is forced or not.
39 * For kNOTIFIER_PolicyForcible, the user function is executed regardless of the callback results,
40 * while kNOTIFIER_PolicyAgreement policy is used to exit NOTIFIER_SwitchConfig()
41 * when any of the callbacks returns error code.
42 * See also NOTIFIER_SwitchConfig() description.
43 */
44typedef enum _notifier_policy
45{
46 kNOTIFIER_PolicyAgreement, /*!< NOTIFIER_SwitchConfig() method is exited when any of the callbacks returns error
47 code. */
48 kNOTIFIER_PolicyForcible, /*!< The user function is executed regardless of the results. */
49} notifier_policy_t;
50
51/*! @brief Notification type. Used to notify registered callbacks */
52typedef enum _notifier_notification_type
53{
54 kNOTIFIER_NotifyRecover = 0x00U, /*!< Notify IP to recover to previous work state. */
55 kNOTIFIER_NotifyBefore = 0x01U, /*!< Notify IP that configuration setting is going to change. */
56 kNOTIFIER_NotifyAfter = 0x02U, /*!< Notify IP that configuration setting has been changed. */
57} notifier_notification_type_t;
58
59/*!
60 * @brief The callback type, which indicates kinds of notification the callback handles.
61 *
62 * Used in the callback configuration structure (notifier_callback_config_t)
63 * to specify when the registered callback is called during configuration switch initiated by the
64 * NOTIFIER_SwitchConfig().
65 * Callback can be invoked in following situations.
66 * - Before the configuration switch (Callback return value can affect NOTIFIER_SwitchConfig()
67 * execution. See the NOTIFIER_SwitchConfig() and notifier_policy_t documentation).
68 * - After an unsuccessful attempt to switch configuration
69 * - After a successful configuration switch
70 */
71typedef enum _notifier_callback_type
72{
73 kNOTIFIER_CallbackBefore = 0x01U, /*!< Callback handles BEFORE notification. */
74 kNOTIFIER_CallbackAfter = 0x02U, /*!< Callback handles AFTER notification. */
75 kNOTIFIER_CallbackBeforeAfter = 0x03U, /*!< Callback handles BEFORE and AFTER notification. */
76} notifier_callback_type_t;
77
78/*! @brief Notifier user configuration type.
79 *
80 * Reference of the user defined configuration is stored in an array; the notifier switches between these configurations
81 * based on this array.
82 */
83typedef void notifier_user_config_t;
84
85/*! @brief Notifier user function prototype
86 * Use this function to execute specific operations in configuration switch.
87 * Before and after this function execution, different notification is sent to registered callbacks.
88 * If this function returns any error code, NOTIFIER_SwitchConfig() exits.
89 *
90 * @param targetConfig target Configuration.
91 * @param userData Refers to other specific data passed to user function.
92 * @return An error code or kStatus_Success.
93 */
94typedef status_t (*notifier_user_function_t)(notifier_user_config_t *targetConfig, void *userData);
95
96/*! @brief notification block passed to the registered callback function. */
97typedef struct _notifier_notification_block
98{
99 notifier_user_config_t *targetConfig; /*!< Pointer to target configuration. */
100 notifier_policy_t policy; /*!< Configure transition policy. */
101 notifier_notification_type_t notifyType; /*!< Configure notification type. */
102} notifier_notification_block_t;
103
104/*!
105 * @brief Callback prototype.
106 *
107 * Declaration of a callback. It is common for registered callbacks.
108 * Reference to function of this type is part of the notifier_callback_config_t callback configuration structure.
109 * Depending on callback type, function of this prototype is called (see NOTIFIER_SwitchConfig())
110 * before configuration switch, after it or in both use cases to notify about
111 * the switch progress (see notifier_callback_type_t). When called, the type of the notification
112 * is passed as a parameter along with the reference to the target configuration structure (see
113 * notifier_notification_block_t) and any data passed during the callback registration. When notified before the
114 * configuration switch, depending on the configuration switch policy (see notifier_policy_t), the callback may deny the
115 * execution of the user function by returning an error code different than kStatus_Success (see
116 * NOTIFIER_SwitchConfig()).
117 *
118 * @param notify Notification block.
119 * @param data Callback data. Refers to the data passed during callback registration. Intended to
120 * pass any driver or application data such as internal state information.
121 * @return An error code or kStatus_Success.
122 */
123typedef status_t (*notifier_callback_t)(notifier_notification_block_t *notify, void *data);
124
125/*!
126 * @brief Callback configuration structure.
127 *
128 * This structure holds the configuration of callbacks.
129 * Callbacks of this type are expected to be statically allocated.
130 * This structure contains the following application-defined data.
131 * callback - pointer to the callback function
132 * callbackType - specifies when the callback is called
133 * callbackData - pointer to the data passed to the callback.
134 */
135typedef struct _notifier_callback_config
136{
137 notifier_callback_t callback; /*!< Pointer to the callback function. */
138 notifier_callback_type_t callbackType; /*!< Callback type. */
139 void *callbackData; /*!< Pointer to the data passed to the callback. */
140} notifier_callback_config_t;
141
142/*!
143 * @brief Notifier handle structure.
144 *
145 * Notifier handle structure. Contains data necessary for the Notifier proper function.
146 * Stores references to registered configurations, callbacks, information about their numbers,
147 * user function, user data, and other internal data.
148 * NOTIFIER_CreateHandle() must be called to initialize this handle.
149 */
150typedef struct _notifier_handle
151{
152 notifier_user_config_t **configsTable; /*!< Pointer to configure table. */
153 uint8_t configsNumber; /*!< Number of configurations. */
154 notifier_callback_config_t *callbacksTable; /*!< Pointer to callback table. */
155 uint8_t callbacksNumber; /*!< Maximum number of callback configurations. */
156 uint8_t errorCallbackIndex; /*!< Index of callback returns error. */
157 uint8_t currentConfigIndex; /*!< Index of current configuration. */
158 notifier_user_function_t userFunction; /*!< User function. */
159 void *userData; /*!< User data passed to user function. */
160} notifier_handle_t;
161
162/*******************************************************************************
163 * API
164 ******************************************************************************/
165
166#if defined(__cplusplus)
167extern "C" {
168#endif
169
170/*!
171 * @brief Creates a Notifier handle.
172 *
173 * @param notifierHandle A pointer to the notifier handle.
174 * @param configs A pointer to an array with references to all configurations which is handled by the Notifier.
175 * @param configsNumber Number of configurations. Size of the configuration array.
176 * @param callbacks A pointer to an array of callback configurations.
177 * If there are no callbacks to register during Notifier initialization, use NULL value.
178 * @param callbacksNumber Number of registered callbacks. Size of the callbacks array.
179 * @param userFunction User function.
180 * @param userData User data passed to user function.
181 * @return An error Code or kStatus_Success.
182 */
183status_t NOTIFIER_CreateHandle(notifier_handle_t *notifierHandle,
184 notifier_user_config_t **configs,
185 uint8_t configsNumber,
186 notifier_callback_config_t *callbacks,
187 uint8_t callbacksNumber,
188 notifier_user_function_t userFunction,
189 void *userData);
190
191/*!
192 * @brief Switches the configuration according to a pre-defined structure.
193 *
194 * This function sets the system to the target configuration. Before transition,
195 * the Notifier sends notifications to all callbacks registered to the callback table.
196 * Callbacks are invoked in the following order: All registered callbacks are notified
197 * ordered by index in the callbacks array. The same order is used for before and after switch notifications.
198 * The notifications before the configuration switch can be used to obtain confirmation about
199 * the change from registered callbacks. If any registered callback denies the
200 * configuration change, further execution of this function depends on the notifier policy: the
201 * configuration change is either forced (kNOTIFIER_PolicyForcible) or exited (kNOTIFIER_PolicyAgreement).
202 * When configuration change is forced, the result of the before switch notifications are ignored. If an
203 * agreement is required, if any callback returns an error code, further notifications
204 * before switch notifications are cancelled and all already notified callbacks are re-invoked.
205 * The index of the callback which returned error code during pre-switch notifications is stored
206 * (any error codes during callbacks re-invocation are ignored) and NOTIFIER_GetErrorCallback() can be used to get it.
207 * Regardless of the policies, if any callback returns an error code, an error code indicating in which phase
208 * the error occurred is returned when NOTIFIER_SwitchConfig() exits.
209 * @param notifierHandle pointer to notifier handle
210 * @param configIndex Index of the target configuration.
211 * @param policy Transaction policy, kNOTIFIER_PolicyAgreement or kNOTIFIER_PolicyForcible.
212 *
213 * @return An error code or kStatus_Success.
214 *
215 */
216status_t NOTIFIER_SwitchConfig(notifier_handle_t *notifierHandle, uint8_t configIndex, notifier_policy_t policy);
217
218/*!
219 * @brief This function returns the last failed notification callback.
220 *
221 * This function returns an index of the last callback that failed during the configuration switch while
222 * the last NOTIFIER_SwitchConfig() was called. If the last NOTIFIER_SwitchConfig() call ended successfully
223 * value equal to callbacks number is returned. The returned value represents an index in the array of
224 * static call-backs.
225 *
226 * @param notifierHandle Pointer to the notifier handle
227 * @return Callback Index of the last failed callback or value equal to callbacks count.
228 */
229uint8_t NOTIFIER_GetErrorCallbackIndex(notifier_handle_t *notifierHandle);
230
231#if defined(__cplusplus)
232}
233#endif /* __cplusplus */
234
235/*! @}*/
236
237#endif /* _FSL_NOTIFIER_H_ */