License#
Copyright 2018 Silicon Laboratories Inc. www.silabs.com
SPDX-License-Identifier: Zlib
The licensor of this software is Silicon Laboratories Inc.
This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software.
Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions:
The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
This notice may not be removed or altered from any source distribution.
/***************************************************************************/
#if defined(EZSP_HOST)
#define EMBER_NO_IDLE_SUPPORT
#endif
/*
*
* This was originally part of the group documentation, but it was removed,
* since it's not important for Connect platforms. It is kept as it might become
* important later when support for new platforms is added.
*
* The base time units for events are ticks. Each tick is approximately equal
* to a millisecond, but the true duration depends on the platform. The
* duration of a tick is 1000 / ::MILLISECOND_TICKS_PER_SECOND, where 1000 is
* the number of milliseconds per second and ::MILLISECOND_TICKS_PER_SECOND is
* the platform-specific number of ticks per second. For example,
* ::MILLISECOND_TICKS_PER_SECOND on the EM357 SoC is 1024, so each tick is
* 1000 / 1024 = ~0.98 milliseconds. Calling
* ::emberEventControlSetDelayMS(someEvent, 100) on the EM357 SoC will schedule
* the event for 100 ticks * (1000 milliseconds / 1024 ticks) =
* ~97.7 milliseconds. Note, however, that the accuracy of the base tick
* depends on the timer source. Furthermore, the scheduled delay is the minimum
* delay. If ::emberRunEvents or ::emberRunTask are not called frequently
* enough, the actual delay may be longer than the scheduled delay.
*
* Additionally, the APIs for quarter second and minute delays
* (::emberEventControlSetDelayQS and ::emberEventControlSetDelayMinutes) use
* "binary" units. One quarter second is 256 ticks and one minute is 65536
* ticks. Calling ::emberEventControlSetDelayMinutes(someEvent, 3) on the
* EM357 SoC will schedule the event for 3 minutes * (65536 ticks / minute) *
* (1000 milliseconds / 1024 ticks) = ~3.2 minutes. It is possible to avoid
* these binary units by using ::emberEventControlSetDelayMS and the various
* MILLISECOND_TICKS_PER_XXX multipliers. For example, calling
* ::emberEventControlSetDelayMS(someEvent, 3 * MILLISECOND_TICKS_PER_MINUTE)
* will delay for 3 minutes on any platform. Be aware of
* ::EMBER_MAX_EVENT_CONTROL_DELAY_MS when using this approach.
*/
// Controlling events
// Possible event status values. Having zero as the 'inactive' value
// causes events to initially be inactive.
//
#ifndef __EVENT_H__
#define __EVENT_H__
#define elapsedTimeInt8u(oldTime, newTime) \
((uint8_t) ((uint8_t)(newTime) - (uint8_t)(oldTime)))
#define elapsedTimeInt16u(oldTime, newTime) \
((uint16_t) ((uint16_t)(newTime) - (uint16_t)(oldTime)))
#define elapsedTimeInt32u(oldTime, newTime) \
((uint32_t) ((uint32_t)(newTime) - (uint32_t)(oldTime)))
#define MAX_INT8U_VALUE (0xFF)
#define HALF_MAX_INT8U_VALUE (0x80)
#define timeGTorEqualInt8u(t1, t2) \
(elapsedTimeInt8u(t2, t1) <= (HALF_MAX_INT8U_VALUE))
#define MAX_INT16U_VALUE (0xFFFF)
#define HALF_MAX_INT16U_VALUE (0x8000)
#define timeGTorEqualInt16u(t1, t2) \
(elapsedTimeInt16u(t2, t1) <= (HALF_MAX_INT16U_VALUE))
#define MAX_INT32U_VALUE (0xFFFFFFFFUL)
#define HALF_MAX_INT32U_VALUE (0x80000000UL)
#define timeGTorEqualInt32u(t1, t2) \
(elapsedTimeInt32u(t2, t1) <= (HALF_MAX_INT32U_VALUE))
#define MILLISECOND_TICKS_PER_SECOND 1000UL
#ifndef MILLISECOND_TICKS_PER_DECISECOND
#define MILLISECOND_TICKS_PER_DECISECOND (MILLISECOND_TICKS_PER_SECOND / 10)
#endif
#ifndef MILLISECOND_TICKS_PER_QUARTERSECOND
#define MILLISECOND_TICKS_PER_QUARTERSECOND (MILLISECOND_TICKS_PER_SECOND >> 2)
#endif
#ifndef MILLISECOND_TICKS_PER_MINUTE
#define MILLISECOND_TICKS_PER_MINUTE (60UL * MILLISECOND_TICKS_PER_SECOND)
#endif
#ifndef MILLISECOND_TICKS_PER_HOUR
#define MILLISECOND_TICKS_PER_HOUR (60UL * MILLISECOND_TICKS_PER_MINUTE)
#endif
#ifndef MILLISECOND_TICKS_PER_DAY
#define MILLISECOND_TICKS_PER_DAY (24UL * MILLISECOND_TICKS_PER_HOUR)
#endif
#define EMBER_TASK_COUNT (3)
#define emberEventControlSetInactive(control) \
do { (control).status = EMBER_EVENT_INACTIVE; } while (0)
#define emberEventControlGetActive(control) \
((control).status != EMBER_EVENT_INACTIVE)
#define emberEventControlSetActive(control) \
do { sli_event_control_set_active(&(control)); } while (0)
void sli_event_control_set_active(EmberEventControl *event);
#define EMBER_MAX_EVENT_CONTROL_DELAY_MS (HALF_MAX_INT32U_VALUE - 1)
#define emberEventControlSetDelayMS(control, delay) \
do { emEventControlSetDelayMS(&(control), (delay)); } while (0)
void emEventControlSetDelayMS(EmberEventControl*event, uint32_t delay);
#define EMBER_MAX_EVENT_CONTROL_DELAY_QS (EMBER_MAX_EVENT_CONTROL_DELAY_MS >> 8)
#define emberEventControlSetDelayQS(control, delay) \
do { emEventControlSetDelayMS(&(control), (delay) << 8); } while (0)
#define EMBER_MAX_EVENT_CONTROL_DELAY_MINUTES (EMBER_MAX_EVENT_CONTROL_DELAY_MS >> 16)
#define emberEventControlSetDelayMinutes(control, delay) \
do { emEventControlSetDelayMS(&(control), (delay) << 16); } while (0)
#define emberEventControlGetRemainingMS(control) \
(emEventControlGetRemainingMS(&(control)))
uint32_t emEventControlGetRemainingMS(EmberEventControl *event);
// Running events
void emberRunEvents(EmberEventData *events);
void emberRunTask(EmberTaskId taskid);
uint32_t emberMsToNextEvent(EmberEventData *events, uint32_t maxMs);
uint32_t emberMsToNextEventExtended(EmberEventData *events, uint32_t maxMs, uint8_t* returnIndex);
uint32_t emberMsToNextStackEvent(void);
EmberTaskId emberTaskInit(EmberEventData *events);
bool emberMarkTaskIdle(EmberTaskId taskid);
#ifndef EMBER_NO_IDLE_SUPPORT
#define emberTaskEnableIdling(allow) \
do { emTaskEnableIdling((allow)); } while (0)
void emTaskEnableIdling(bool allow);
#define emberMarkTaskActive(taskid) \
do { emMarkTaskActive((taskid)); } while (0)
void emMarkTaskActive(EmberTaskId taskid);
#else
#define emberTaskEnableIdling(allow) do {} while (0)
#define emberMarkTaskActive(taskid) do {} while (0)
#endif // EMBER_NO_IDLE_SUPPORT
#endif // __EVENT_H__
Time Manipulation Macros#
Returns the elapsed time between two 8 bit values. Result may not be valid if the time samples differ by more than 127.
Returns the elapsed time between two 16 bit values. Result may not be valid if the time samples differ by more than 32767.
Returns the elapsed time between two 32 bit values. Result may not be valid if the time samples differ by more than 2147483647.
Returns true if t1 is greater than t2. Can only account for 1 wrap around of the variable before it is wrong.
Returns the elapsed time between two 8 bit values. Result may not be valid if the time samples differ by more than 127.
Returns the elapsed time between two 8 bit values. Result may not be valid if the time samples differ by more than 127.
Returns true if t1 is greater than t2. Can only account for 1 wrap around of the variable before it is wrong.
Returns the elapsed time between two 8 bit values. Result may not be valid if the time samples differ by more than 127.
Returns the elapsed time between two 8 bit values. Result may not be valid if the time samples differ by more than 127.
Returns true if t1 is greater than t2. Can only account for 1 wrap around of the variable before it is wrong.
Returns the elapsed time between two 8 bit values. Result may not be valid if the time samples differ by more than 127.
Returns the elapsed time between two 8 bit values. Result may not be valid if the time samples differ by more than 127.
Returns the elapsed time between two 8 bit values. Result may not be valid if the time samples differ by more than 127.
Returns the elapsed time between two 8 bit values. Result may not be valid if the time samples differ by more than 127.
Returns the elapsed time between two 8 bit values. Result may not be valid if the time samples differ by more than 127.
Returns the elapsed time between two 8 bit values. Result may not be valid if the time samples differ by more than 127.
Returns the elapsed time between two 8 bit values. Result may not be valid if the time samples differ by more than 127.
Returns the elapsed time between two 8 bit values. Result may not be valid if the time samples differ by more than 127.
The number of event tasks that can be used to schedule and run events. Connect stack requires one, while another is used for Application Framework events.
Set EmberEventControl as inactive (no pending event).
Check whether EmberEventControl is currently active. An event is considered active if it is set to run some time in the future (activated by emberEventControlSetActive(), emberEventControlSetDelayMS() or any other emberEventControlSetDelay* functions)
Set EmberEventControl to run at the next available opportunity.
The maximum delay that may be passed to emberEventControlSetDelayMS().
Set EmberEventControl to run some milliseconds in the future.
The maximum delay that may be passed to emberEventControlSetDelayQS().
Set EmberEventControl to run some quarter seconds in the future.
The maximum delay that may be passed to emberEventControlSetDelayMinutes().
Set EmberEventControl to run some minutes in the future.
Check when the event is scheduled to run.
Enable or disable idling.
Calling it indicates that a task has something to do, so it should prevent the CPU from idling until emberMarkTaskIdle is next called on this task.
Set EmberEventControl to run at the next available opportunity.
Set EmberEventControl to run some milliseconds in the future.
Check when the event is scheduled to run.
Start an event handler if anything is scheduled when this function is called.
Start an event handler if there is anything scheduled at the moment this function is called.
Check when the next event is scheduled to run.
Check when the next event is scheduled to run.
Check when the next stack event is scheduled to run.
Initialize a task for managing events and processor idling state.
Try to idle the CPU, unless any events in any tasks are pending.
Enable or disable idling.
Calling it indicates that a task has something to do, so it should prevent the CPU from idling until emberMarkTaskIdle is next called on this task.
Macros#
Time Manipulation Macros Documentation#
elapsedTimeInt8u#
#define elapsedTimeInt8uValue:
(oldTime, newTime)
Returns the elapsed time between two 8 bit values. Result may not be valid if the time samples differ by more than 127.
190
of file /mnt/raid/workspaces/ws.Iq463TQni/overlay/gsdk/protocol/flex/stack/include/event.h
elapsedTimeInt16u#
#define elapsedTimeInt16uValue:
(oldTime, newTime)
Returns the elapsed time between two 16 bit values. Result may not be valid if the time samples differ by more than 32767.
197
of file /mnt/raid/workspaces/ws.Iq463TQni/overlay/gsdk/protocol/flex/stack/include/event.h
elapsedTimeInt32u#
#define elapsedTimeInt32uValue:
(oldTime, newTime)
Returns the elapsed time between two 32 bit values. Result may not be valid if the time samples differ by more than 2147483647.
204
of file /mnt/raid/workspaces/ws.Iq463TQni/overlay/gsdk/protocol/flex/stack/include/event.h
MAX_INT8U_VALUE#
#define MAX_INT8U_VALUEValue:
(0xFF)
Returns true if t1 is greater than t2. Can only account for 1 wrap around of the variable before it is wrong.
211
of file /mnt/raid/workspaces/ws.Iq463TQni/overlay/gsdk/protocol/flex/stack/include/event.h
HALF_MAX_INT8U_VALUE#
#define HALF_MAX_INT8U_VALUEValue:
(0x80)
Returns the elapsed time between two 8 bit values. Result may not be valid if the time samples differ by more than 127.
212
of file /mnt/raid/workspaces/ws.Iq463TQni/overlay/gsdk/protocol/flex/stack/include/event.h
timeGTorEqualInt8u#
#define timeGTorEqualInt8uValue:
(t1, t2)
Returns the elapsed time between two 8 bit values. Result may not be valid if the time samples differ by more than 127.
213
of file /mnt/raid/workspaces/ws.Iq463TQni/overlay/gsdk/protocol/flex/stack/include/event.h
MAX_INT16U_VALUE#
#define MAX_INT16U_VALUEValue:
(0xFFFF)
Returns true if t1 is greater than t2. Can only account for 1 wrap around of the variable before it is wrong.
220
of file /mnt/raid/workspaces/ws.Iq463TQni/overlay/gsdk/protocol/flex/stack/include/event.h
HALF_MAX_INT16U_VALUE#
#define HALF_MAX_INT16U_VALUEValue:
(0x8000)
Returns the elapsed time between two 8 bit values. Result may not be valid if the time samples differ by more than 127.
221
of file /mnt/raid/workspaces/ws.Iq463TQni/overlay/gsdk/protocol/flex/stack/include/event.h
timeGTorEqualInt16u#
#define timeGTorEqualInt16uValue:
(t1, t2)
Returns the elapsed time between two 8 bit values. Result may not be valid if the time samples differ by more than 127.
222
of file /mnt/raid/workspaces/ws.Iq463TQni/overlay/gsdk/protocol/flex/stack/include/event.h
MAX_INT32U_VALUE#
#define MAX_INT32U_VALUEValue:
(0xFFFFFFFFUL)
Returns true if t1 is greater than t2. Can only account for 1 wrap around of the variable before it is wrong.
229
of file /mnt/raid/workspaces/ws.Iq463TQni/overlay/gsdk/protocol/flex/stack/include/event.h
HALF_MAX_INT32U_VALUE#
#define HALF_MAX_INT32U_VALUEValue:
(0x80000000UL)
Returns the elapsed time between two 8 bit values. Result may not be valid if the time samples differ by more than 127.
230
of file /mnt/raid/workspaces/ws.Iq463TQni/overlay/gsdk/protocol/flex/stack/include/event.h
timeGTorEqualInt32u#
#define timeGTorEqualInt32uValue:
(t1, t2)
Returns the elapsed time between two 8 bit values. Result may not be valid if the time samples differ by more than 127.
231
of file /mnt/raid/workspaces/ws.Iq463TQni/overlay/gsdk/protocol/flex/stack/include/event.h
MILLISECOND_TICKS_PER_SECOND#
#define MILLISECOND_TICKS_PER_SECONDValue:
1000UL
Returns the elapsed time between two 8 bit values. Result may not be valid if the time samples differ by more than 127.
234
of file /mnt/raid/workspaces/ws.Iq463TQni/overlay/gsdk/protocol/flex/stack/include/event.h
MILLISECOND_TICKS_PER_DECISECOND#
#define MILLISECOND_TICKS_PER_DECISECONDValue:
(MILLISECOND_TICKS_PER_SECOND / 10)
Returns the elapsed time between two 8 bit values. Result may not be valid if the time samples differ by more than 127.
237
of file /mnt/raid/workspaces/ws.Iq463TQni/overlay/gsdk/protocol/flex/stack/include/event.h
MILLISECOND_TICKS_PER_QUARTERSECOND#
#define MILLISECOND_TICKS_PER_QUARTERSECONDValue:
(MILLISECOND_TICKS_PER_SECOND >> 2)
Returns the elapsed time between two 8 bit values. Result may not be valid if the time samples differ by more than 127.
241
of file /mnt/raid/workspaces/ws.Iq463TQni/overlay/gsdk/protocol/flex/stack/include/event.h
MILLISECOND_TICKS_PER_MINUTE#
#define MILLISECOND_TICKS_PER_MINUTEValue:
(60UL * MILLISECOND_TICKS_PER_SECOND)
Returns the elapsed time between two 8 bit values. Result may not be valid if the time samples differ by more than 127.
245
of file /mnt/raid/workspaces/ws.Iq463TQni/overlay/gsdk/protocol/flex/stack/include/event.h
MILLISECOND_TICKS_PER_HOUR#
#define MILLISECOND_TICKS_PER_HOURValue:
(60UL * MILLISECOND_TICKS_PER_MINUTE)
Returns the elapsed time between two 8 bit values. Result may not be valid if the time samples differ by more than 127.
249
of file /mnt/raid/workspaces/ws.Iq463TQni/overlay/gsdk/protocol/flex/stack/include/event.h
MILLISECOND_TICKS_PER_DAY#
#define MILLISECOND_TICKS_PER_DAYValue:
(24UL * MILLISECOND_TICKS_PER_HOUR)
Returns the elapsed time between two 8 bit values. Result may not be valid if the time samples differ by more than 127.
253
of file /mnt/raid/workspaces/ws.Iq463TQni/overlay/gsdk/protocol/flex/stack/include/event.h
EMBER_TASK_COUNT#
#define EMBER_TASK_COUNTValue:
(3)
The number of event tasks that can be used to schedule and run events. Connect stack requires one, while another is used for Application Framework events.
261
of file /mnt/raid/workspaces/ws.Iq463TQni/overlay/gsdk/protocol/flex/stack/include/event.h
emberEventControlSetInactive#
#define emberEventControlSetInactiveValue:
(control)
Set EmberEventControl as inactive (no pending event).
268
of file /mnt/raid/workspaces/ws.Iq463TQni/overlay/gsdk/protocol/flex/stack/include/event.h
emberEventControlGetActive#
#define emberEventControlGetActiveValue:
(control)
Check whether EmberEventControl is currently active. An event is considered active if it is set to run some time in the future (activated by emberEventControlSetActive(), emberEventControlSetDelayMS() or any other emberEventControlSetDelay* functions)
Returns
Returns true if the event is active false otherwise
282
of file /mnt/raid/workspaces/ws.Iq463TQni/overlay/gsdk/protocol/flex/stack/include/event.h
emberEventControlSetActive#
#define emberEventControlSetActiveValue:
(control)
Set EmberEventControl to run at the next available opportunity.
291
of file /mnt/raid/workspaces/ws.Iq463TQni/overlay/gsdk/protocol/flex/stack/include/event.h
EMBER_MAX_EVENT_CONTROL_DELAY_MS#
#define EMBER_MAX_EVENT_CONTROL_DELAY_MSValue:
(HALF_MAX_INT32U_VALUE - 1)
The maximum delay that may be passed to emberEventControlSetDelayMS().
305
of file /mnt/raid/workspaces/ws.Iq463TQni/overlay/gsdk/protocol/flex/stack/include/event.h
emberEventControlSetDelayMS#
#define emberEventControlSetDelayMSValue:
(control, delay)
Set EmberEventControl to run some milliseconds in the future.
314
of file /mnt/raid/workspaces/ws.Iq463TQni/overlay/gsdk/protocol/flex/stack/include/event.h
EMBER_MAX_EVENT_CONTROL_DELAY_QS#
#define EMBER_MAX_EVENT_CONTROL_DELAY_QSValue:
(EMBER_MAX_EVENT_CONTROL_DELAY_MS >> 8)
The maximum delay that may be passed to emberEventControlSetDelayQS().
330
of file /mnt/raid/workspaces/ws.Iq463TQni/overlay/gsdk/protocol/flex/stack/include/event.h
emberEventControlSetDelayQS#
#define emberEventControlSetDelayQSValue:
(control, delay)
Set EmberEventControl to run some quarter seconds in the future.
Warnings
Applications should use emberEventControlSetDelayQS() instead.
341
of file /mnt/raid/workspaces/ws.Iq463TQni/overlay/gsdk/protocol/flex/stack/include/event.h
EMBER_MAX_EVENT_CONTROL_DELAY_MINUTES#
#define EMBER_MAX_EVENT_CONTROL_DELAY_MINUTESValue:
(EMBER_MAX_EVENT_CONTROL_DELAY_MS >> 16)
The maximum delay that may be passed to emberEventControlSetDelayMinutes().
347
of file /mnt/raid/workspaces/ws.Iq463TQni/overlay/gsdk/protocol/flex/stack/include/event.h
emberEventControlSetDelayMinutes#
#define emberEventControlSetDelayMinutesValue:
(control, delay)
Set EmberEventControl to run some minutes in the future.
356
of file /mnt/raid/workspaces/ws.Iq463TQni/overlay/gsdk/protocol/flex/stack/include/event.h
emberEventControlGetRemainingMS#
#define emberEventControlGetRemainingMSValue:
(control)
Check when the event is scheduled to run.
Returns
Returns the amount of milliseconds remaining before the event is scheduled to run. If the event is inactive, MAX_INT32U_VALUE is returned.
366
of file /mnt/raid/workspaces/ws.Iq463TQni/overlay/gsdk/protocol/flex/stack/include/event.h
emberTaskEnableIdling#
#define emberTaskEnableIdlingValue:
(allow)
Enable or disable idling.
477
of file /mnt/raid/workspaces/ws.Iq463TQni/overlay/gsdk/protocol/flex/stack/include/event.h
emberMarkTaskActive#
#define emberMarkTaskActiveValue:
(taskid)
Calling it indicates that a task has something to do, so it should prevent the CPU from idling until emberMarkTaskIdle is next called on this task.
492
of file /mnt/raid/workspaces/ws.Iq463TQni/overlay/gsdk/protocol/flex/stack/include/event.h
sli_event_control_set_active#
void sli_event_control_set_active (EmberEventControl * event)
Set EmberEventControl to run at the next available opportunity.
[in] | event | Pointer to the control of the event to set active |
Warnings
Applications should use emberEventControlSetActive() instead.
299
of file /mnt/raid/workspaces/ws.Iq463TQni/overlay/gsdk/protocol/flex/stack/include/event.h
emEventControlSetDelayMS#
void emEventControlSetDelayMS (EmberEventControl * event, uint32_t delay)
Set EmberEventControl to run some milliseconds in the future.
[in] | event | Pointer to the control of the event to run. |
[in] | delay | The delay in milliseconds. Must be less than EMBER_MAX_EVENT_CONTROL_DELAY_MS |
Warnings
Applications should use emberEventControlSetDelayMS() instead.
325
of file /mnt/raid/workspaces/ws.Iq463TQni/overlay/gsdk/protocol/flex/stack/include/event.h
emEventControlGetRemainingMS#
uint32_t emEventControlGetRemainingMS (EmberEventControl * event)
Check when the event is scheduled to run.
[in] | event | Pointer to the control of the event in question. |
Returns
Return the amount of milliseconds remaining before the event is scheduled to run. If the event is inactive, MAX_INT32U_VALUE is returned.
Warnings
Applications should use emberEventControlGetRemainingMS() instead.
378
of file /mnt/raid/workspaces/ws.Iq463TQni/overlay/gsdk/protocol/flex/stack/include/event.h
emberRunEvents#
void emberRunEvents (EmberEventData * events)
Start an event handler if anything is scheduled when this function is called.
[in] | events | Pointer to the array of events. |
An application typically creates an array of events along with their handlers. This function should be called in the main loop to run those events. Warnings
This is normally handled by emberRunTask() in the main plugin.
392
of file /mnt/raid/workspaces/ws.Iq463TQni/overlay/gsdk/protocol/flex/stack/include/event.h
emberRunTask#
void emberRunTask (EmberTaskId taskid)
Start an event handler if there is anything scheduled at the moment this function is called.
N/A | taskid |
If an application has initialized a task via emberTaskInit(), to run the events associated with that task, it should call emberRunTask() instead of emberRunEvents().
Warnings
This is normally handled by the main plugin.
405
of file /mnt/raid/workspaces/ws.Iq463TQni/overlay/gsdk/protocol/flex/stack/include/event.h
emberMsToNextEvent#
uint32_t emberMsToNextEvent (EmberEventData * events, uint32_t maxMs)
Check when the next event is scheduled to run.
[in] | events | An array of events to check. |
[in] | maxMs | If no event is scheduled before maxMs, maxMs will be returned |
Returns
Returns the number of milliseconds before the next event is scheduled to expire, or
maxMs
if no event is scheduled to expire within that time.
Note
If any events are modified within an interrupt, to guarantee the accuracy of this API, it must be called with interrupts disabled.
See Also
420
of file /mnt/raid/workspaces/ws.Iq463TQni/overlay/gsdk/protocol/flex/stack/include/event.h
emberMsToNextEventExtended#
uint32_t emberMsToNextEventExtended (EmberEventData * events, uint32_t maxMs, uint8_t * returnIndex)
Check when the next event is scheduled to run.
[in] | events | An array of events to check. |
[in] | maxMs | If no event is scheduled before maxMs, maxMs will be returned |
[out] | returnIndex | If not NULL pointer was passed, the index of the next event will be returned here, or 0xFF if no event is scheduled before maxMs. |
Returns
Returns the number of milliseconds before the next event is scheduled to expire, or
maxMs
if no event is scheduled to expire within that time.
Note
If any events are modified within an interrupt, to guarantee the accuracy of this API, it must be called with interrupts disabled.
See Also
438
of file /mnt/raid/workspaces/ws.Iq463TQni/overlay/gsdk/protocol/flex/stack/include/event.h
emberMsToNextStackEvent#
uint32_t emberMsToNextStackEvent (void )
Check when the next stack event is scheduled to run.
N/A |
Returns
Returns the number of milliseconds before the next stack event is scheduled to run.
446
of file /mnt/raid/workspaces/ws.Iq463TQni/overlay/gsdk/protocol/flex/stack/include/event.h
emberTaskInit#
EmberTaskId emberTaskInit (EmberEventData * events)
Initialize a task for managing events and processor idling state.
[in] | events | Pointer to the array of events to manage |
Returns
Returns the EmberTaskId which represents the newly created task.
Note
After the task is created emberRunTask() should be called periodically.
456
of file /mnt/raid/workspaces/ws.Iq463TQni/overlay/gsdk/protocol/flex/stack/include/event.h
emberMarkTaskIdle#
bool emberMarkTaskIdle (EmberTaskId taskid)
Try to idle the CPU, unless any events in any tasks are pending.
[in] | taskid | the task which should handle the idling. |
Returns
Returns true if the processor was idled false if idling wasn't permitted because a task has something to do.
Note
This API should always be called with interrupts disabled. It will forcibly re-enable interrupts before returning.
468
of file /mnt/raid/workspaces/ws.Iq463TQni/overlay/gsdk/protocol/flex/stack/include/event.h
emTaskEnableIdling#
void emTaskEnableIdling (bool allow)
Enable or disable idling.
[in] | allow | Setting it to true will enable, while setting it to false will disable idling. |
Warnings
Applications should use emberTaskEnableIdling() instead.
484
of file /mnt/raid/workspaces/ws.Iq463TQni/overlay/gsdk/protocol/flex/stack/include/event.h
emMarkTaskActive#
void emMarkTaskActive (EmberTaskId taskid)
Calling it indicates that a task has something to do, so it should prevent the CPU from idling until emberMarkTaskIdle is next called on this task.
[in] | taskid | The task to mark active. |
Warnings
Applications should use emberMarkTaskActive() instead.
499
of file /mnt/raid/workspaces/ws.Iq463TQni/overlay/gsdk/protocol/flex/stack/include/event.h