![]() |
ISF
2.2 rev 5
Intelligent Sensing Framework for Kinetis with Processor Expert
|
Implements the ISF bus management functionality. This file is internal ISF code. More...
#include "isf.h"
#include "fsl_pit_hal.h"
#include "fsl_pit_driver.h"
#include "isf_bm.h"
#include "bm_internal.h"
#include "isf_init.h"
Go to the source code of this file.
Macros | |
#define | BM_TOKEN_STARTING_VAL (0x100) |
#define | BM_TASK_NAME ISF_TASK_BM_NAME |
#define | BM_TASK_STACK_SIZE ISF_TASK_BM_STACK_SIZE |
#define | BM_TASK_PRIORITY ISF_TASK_BM_PRIORITY |
Functions | |
OSA_TASK_DEFINE (BM, BM_TASK_STACK_SIZE) | |
void | BM_task (os_task_param_t task_init_data) |
BM Task . . More... | |
void | isf_system_sync (void) |
This function synchronizes the user tasks and the system initialization. More... | |
void | isr_bm_callback_tmr (void *dummy) |
isf_status_t | bm_init (void) |
Bus management initialization . More... | |
void | task_bm (uint32 initial_data) |
Bus Manager Task - main task to handle communication via mailboxes with the host. More... | |
uint32 | bm_update_cb_list (void) |
int | bm_find_cb (bm_callback_token_t aToken) |
Find the callback associated with the given a token. . More... | |
bm_callback_token_t | bm_generate_token (void) |
Bus management generate token. This token generator assigns one bit out of 32 bits as a token value. . More... | |
void | bm_sort_cb_list (void) |
Sort the callback list based on period in ascending order (callback with smallest period is first in the array). . More... | |
void | bm_reset_period (void) |
uint32 | bm_find_smallest_active_period (int8 period_type) |
Find the smallest current period. . More... | |
void | bm_timer_init (void) |
bm_callback_token_t | bm_register_periodic_callback (isf_duration_t aPeriod, bm_callback_t *pCallback, void *pCbData) |
This API schedules a callback at the specified period. More... | |
isf_status_t | bm_unregister_callback (bm_callback_token_t aToken) |
This API unregisters one or more callbacks. More... | |
uint32 | bm_get_num_callback (void) |
This API returns the number of callbacks registered. More... | |
isf_status_t | bm_start (boolean aSync, bm_callback_token_t aTokens) |
This API sets one or more callback(s) to the active state. More... | |
isf_status_t | bm_stop (bm_callback_token_t aTokens) |
This API stops one or more callback(s) by setting them to the inactive state. More... | |
void | swdelay (int32 cnt) |
uint32 | bm_powerdown (void) |
Prepare bm for powerdown state. Called by power manager. . More... | |
bool | bm_statechange_query (void) |
Tells caller if there a change in the state of the bus manager. Change could be: More... | |
void | bm_statechange_reset (void) |
Reset the state change. More... | |
bool | bm_cb_occurred_query (void) |
Tells caller if a callback was scheduled to be called since setting bus manager for powerdown mode. More... | |
bool | bm_active_cb_query (void) |
Tells caller if there are active callbacks. . More... | |
Variables | |
BM_STATIC event_t | event_bm_callback |
BM_STATIC semaphore_t | sema_bm_access |
BM_STATIC BM_VOLATILE bm_cb_config_t * | gpBm_cb_list [MAX_BM_CALLBACKS] |
BM_STATIC BM_VOLATILE bool | gBm_firsttime_flag = FALSE |
BM_STATIC BM_VOLATILE bool | gBm_state_change = FALSE |
BM_STATIC BM_VOLATILE bool | gBm_cb_occurred = FALSE |
bm_t | bm |
uint32 | bmPITInstance |
uint32 | bmRolloverPeriod |
Implements the ISF bus management functionality. This file is internal ISF code.
Definition in file bus_management.c.
#define BM_TASK_NAME ISF_TASK_BM_NAME |
Definition at line 48 of file bus_management.c.
Referenced by bm_init().
#define BM_TASK_PRIORITY ISF_TASK_BM_PRIORITY |
Definition at line 52 of file bus_management.c.
Referenced by bm_init().
#define BM_TASK_STACK_SIZE ISF_TASK_BM_STACK_SIZE |
Definition at line 50 of file bus_management.c.
Referenced by bm_init().
#define BM_TOKEN_STARTING_VAL (0x100) |
Definition at line 31 of file bus_management.c.
bool bm_active_cb_query | ( | void | ) |
Tells caller if there are active callbacks.
.
Definition at line 1112 of file bus_management.c.
References bm_t::cb_token_active_mask, FALSE, sema_bm_access, and TRUE.
bool bm_cb_occurred_query | ( | void | ) |
Tells caller if a callback was scheduled to be called since setting bus manager for powerdown mode.
Definition at line 1088 of file bus_management.c.
References gBm_cb_occurred.
int bm_find_cb | ( | bm_callback_token_t | aToken | ) |
Find the callback associated with the given a token.
.
aToken | - [in] Token of callback to search for |
Definition at line 862 of file bus_management.c.
References bm_t::cb_list_cur_cnt, and gpBm_cb_list.
Referenced by bm_unregister_callback().
Find the smallest current period.
.
Definition at line 896 of file bus_management.c.
References BM_FULL_PERIOD, bmRolloverPeriod, bm_t::cb_list_cur_cnt, bm_t::cb_token_active_mask, bm_cb_config_t::Cur_period, gpBm_cb_list, MAX_BM_PERIOD_USEC, bm_cb_config_t::nToken, and bm_cb_config_t::Period.
Referenced by bm_update_cb_list().
bm_callback_token_t bm_generate_token | ( | void | ) |
Bus management generate token. This token generator assigns one bit out of 32 bits as a token value.
.
Definition at line 752 of file bus_management.c.
References bm_t::cb_token_registered_mask, and MAX_BM_CALLBACKS.
Referenced by bm_register_periodic_callback().
uint32 bm_get_num_callback | ( | void | ) |
This API returns the number of callbacks registered.
The number of registered callbacks is returned regardless of their state, active or inactive.
Definition at line 252 of file bus_management.c.
References bm_t::cb_list_cur_cnt, and sema_bm_access.
isf_status_t bm_init | ( | void | ) |
Bus management initialization
.
This API initializes the Bus Manager.
Definition at line 445 of file bus_management.c.
References BM_PIPELINE_STAGES, BM_task(), BM_TASK_NAME, BM_TASK_PRIORITY, BM_TASK_STACK_SIZE, bm_timer_init(), bm_t::cb_events, bm_t::cb_list_cur_cnt, bm_t::cb_token_active_mask, bm_t::cb_token_registered_mask, event_bm_callback, gpBm_cb_list, ISF_SUCCESS, bm_t::pipeline_index, and sema_bm_access.
Referenced by isf_lib_init().
uint32 bm_powerdown | ( | void | ) |
Prepare bm for powerdown state. Called by power manager.
.
Definition at line 961 of file bus_management.c.
References bm_t::cb_token_active_mask, FALSE, gBm_cb_occurred, gBm_state_change, ISF_BM_PIT_CHANNEL_NO, ISF_BM_PIT_INSTANCE, and bm_t::time_keeper_usec.
bm_callback_token_t bm_register_periodic_callback | ( | isf_duration_t | aPeriod, |
bm_callback_t * | apCallback, | ||
void * | apCbData | ||
) |
This API schedules a callback at the specified period.
The Bus Manager schedules periodic sensor data automatically. It allows a registered callback to be automatically invoked at the specified period. Multiple callbacks registered for the same frequency are executed serially by the Bus Manager. If registration of the callback is successful, the callback is set to the inactive state. The API function bm_start() can be called to make the callback active.
[in] | aPeriod | The period (1/frequency) between successive callback invocations in microseconds. |
[in] | apCallback | The pointer to the callback function to be registered. |
[in] | apCbData | The pointer passed to the callback function each time it is invoked. This pointer may be used to pass specific data to the callback function. |
COMM_ERROR_NULL_PTR | This error value and the most significant bit of the macro BM_ERROR is returned if the callback function pointer is NULL. |
COMM_ERROR_NOEXIST | This error value and the most significant bit of the macro BM_ERROR is returned if either of the following conditions are true:
|
Definition at line 94 of file bus_management.c.
References BM_ALLOC_MEM_ZERO, BM_ERROR, bm_generate_token(), bm_sort_cb_list(), bm_t::cb_list_cur_cnt, bm_t::cb_token_registered_mask, COMM_ERROR_NOEXIST, COMM_ERROR_NULL_PTR, bm_cb_config_t::Cur_period, gBm_state_change, gpBm_cb_list, MAX_BM_CALLBACKS, MAX_BM_PERIOD_USEC, MIN_BM_PERIOD_USEC, bm_cb_config_t::nToken, bm_cb_config_t::pCallback, bm_cb_config_t::pCbData, bm_cb_config_t::Period, sema_bm_access, and TRUE.
Referenced by Analog_1_fsl_Sensor_Generic_Analog_Configure(), Custom_1_fsl_Sensor_Custom_Configure(), fsl_fxas21002_i2cspi_3D_gyro_Configure(), fsl_fxlc95000_Configure(), fsl_fxls8471_i2cspi_3D_accel_Configure(), fsl_fxls8952_i2c_3D_accel_Configure(), fsl_fxos8700_i2cspi_6D_AccMag_Configure(), fsl_mag3110_i2c_3D_mag_Configure(), fsl_mma8491q_i2c_3D_accel_Configure(), fsl_mma865x_i2c_3D_accel_Configure(), fsl_mma955x_Configure(), fsl_mpl3115_i2c_1D_press_Configure(), and rli_ci_app_callback().
void bm_reset_period | ( | void | ) |
Definition at line 409 of file bus_management.c.
References bm_t::cb_list_cur_cnt, bm_cb_config_t::Cur_period, gpBm_cb_list, and bm_cb_config_t::Period.
Referenced by bm_start().
void bm_sort_cb_list | ( | void | ) |
Sort the callback list based on period in ascending order (callback with smallest period is first in the array).
.
Definition at line 794 of file bus_management.c.
References bm_t::cb_list_cur_cnt, and gpBm_cb_list.
Referenced by bm_register_periodic_callback().
isf_status_t bm_start | ( | boolean | aSync, |
bm_callback_token_t | aTokens | ||
) |
This API sets one or more callback(s) to the active state.
The start operation sets the callback(s) associated with the specified token values to the active state. A callback in the active state is invoked at its specified period. Multiple callbacks are specified by performing a logical OR of the token values. Any callbacks specified by this API call already in the active state, remain in the active state and their current timings are not affected. In addition to setting callbacks to the active state, this API can also synchronize the callback timings. The timings of all the active callbacks are reset to start running at the same time reference. The bm_stop() API call changes a callback to the inactive state.
[in] | aSync | The parameter is set to TRUE to reset the timings of the active callbacks and start them running at the same time reference. The parameter is set to FALSE to leave all active callback timings as they are. |
[in] | aTokens | This parameter specifies the token value(s) of callback(s) to be set to the active state. More than one callback is specified by performing a logical OR of the token values associated with the registered callbacks. |
ISF_SUCCESS | This value is returned if the callback(s) is set to the active state successfully. |
COMM_ERROR_NOEXIST | This value is returned if at least one of the token values specified is invalid because it is not associated with a registered callback. |
Definition at line 278 of file bus_management.c.
References BM_ALL_TOKENS, BM_ERROR, bm_reset_period(), bm_update_cb_list(), bm_t::cb_events, bm_t::cb_list_cur_cnt, bm_t::cb_token_active_mask, bm_t::cb_token_registered_mask, COMM_ERROR_NOEXIST, ISF_BM_PIT_CHANNEL_NO, ISF_BM_PIT_INSTANCE, ISF_SUCCESS, bm_t::pipeline_index, sema_bm_access, and bm_t::time_keeper_usec.
Referenced by Custom_1_fsl_Sensor_Custom_StartData(), fsl_fxas21002_i2cspi_3D_gyro_StartData(), fsl_fxlc95000_StartData(), fsl_fxls8471_i2cspi_3D_accel_StartData(), fsl_fxls8952_i2c_3D_accel_StartData(), fsl_fxos8700_i2cspi_6D_AccMag_StartData(), fsl_mag3110_i2c_3D_mag_StartData(), fsl_mma8491q_i2c_3D_accel_PeriodicCallback(), fsl_mma8491q_i2c_3D_accel_StartData(), fsl_mma865x_i2c_3D_accel_StartData(), fsl_mma955x_StartData(), fsl_mpl3115_i2c_1D_press_StartData(), and rli_ci_app_callback().
bool bm_statechange_query | ( | void | ) |
Tells caller if there a change in the state of the
bus manager. Change could be:
Note that this function is typically called by the power manager (at lowest priority) in ilde mode and all other tasks are blocked. Which means we do not need to protect the read with semaphores and incur latency associated with it.
Definition at line 1022 of file bus_management.c.
References gBm_state_change.
void bm_statechange_reset | ( | void | ) |
Reset the state change.
Definition at line 1049 of file bus_management.c.
References FALSE, gBm_state_change, and sema_bm_access.
isf_status_t bm_stop | ( | bm_callback_token_t | aTokens | ) |
This API stops one or more callback(s) by setting them to the inactive state.
The stop operation sets the the callback(s) associated with the specified token values to the inactive state. A callback in the inactive state is not invoked. Multiple callbacks are specified by performing a logical OR of the token values. Any callbacks specified by this API call already inactive will remain in the inactive state. To change a callback to the active state, the bm_start() API call is used.
[in] | aTokens | This parameter specifies the token value(s) of callback(s) to be set to the inactive state. More than one callback is specified by performing a logical OR of the token values associated with the registered callbacks. |
ISF_SUCCESS | The callback(s) stopped successfully. |
COMM_ERROR_NOEXIST | At least one of the token values specified is invalid because it is not associated with a registered callback. |
Definition at line 349 of file bus_management.c.
References BM_ALL_TOKENS, BM_ERROR, bm_t::cb_list_cur_cnt, bm_t::cb_token_active_mask, bm_t::cb_token_registered_mask, COMM_ERROR_NOEXIST, gBm_state_change, ISF_SUCCESS, sema_bm_access, and TRUE.
Referenced by Custom_1_fsl_Sensor_Custom_EndData(), fsl_fxas21002_i2cspi_3D_gyro_EndData(), fsl_fxlc95000_EndData(), fsl_fxls8471_i2cspi_3D_accel_EndData(), fsl_fxls8952_i2c_3D_accel_EndData(), fsl_fxos8700_i2cspi_6D_AccMag_EndData(), fsl_mag3110_i2c_3D_mag_EndData(), fsl_mma8491q_i2c_3D_accel_EndData(), fsl_mma8491q_read_data_OneShotCallback(), fsl_mma865x_i2c_3D_accel_EndData(), fsl_mma955x_EndData(), fsl_mpl3115_i2c_1D_press_EndData(), and rli_ci_app_callback().
void BM_task | ( | os_task_param_t | task_init_data | ) |
BM Task .
.
Definition at line 1155 of file bus_management.c.
References isf_system_sync(), and task_bm().
Referenced by bm_init().
isf_status_t bm_unregister_callback | ( | bm_callback_token_t | aTokens | ) |
This API unregisters one or more callbacks.
The Bus Manager allows the removal of a registered callback. After a call to this function, unregistered callbacks no longer exist. To specify the callback to be unregistered, the token returned by bm_register_periodic_callback() is passed to bm_unregister_callback(). Multiple callbacks can be specified by performing a logical OR of the token values. The callback can be in the active or inactive state when it is unregistered.
[in] | aTokens | This parameter specifies the token value(s) of the callback(s) that are to be unregistered. More than one callback is specified by performing a logical OR of the token values associated with the registered callbacks. |
ISF_SUCCESS | This value is returned if the callbacks unregistered successfully. |
COMM_ERROR_NOEXIST | This value is returned if at least one of the token values specified in aTokens is invalid because it is not associated with a registered callback. |
Definition at line 178 of file bus_management.c.
References BM_ERROR, bm_find_cb(), BM_FREE_MEM, bm_t::cb_list_cur_cnt, bm_t::cb_token_active_mask, bm_t::cb_token_registered_mask, COMM_ERROR_NOEXIST, gBm_state_change, gpBm_cb_list, ISF_SUCCESS, sema_bm_access, and TRUE.
Referenced by Custom_1_fsl_Sensor_Custom_Shutdown(), fsl_fxas21002_i2cspi_3D_gyro_Shutdown(), fsl_fxlc95000_Configure(), fsl_fxlc95000_Shutdown(), fsl_fxls8471_i2cspi_3D_accel_Shutdown(), fsl_fxls8952_i2c_3D_accel_Shutdown(), fsl_fxos8700_i2cspi_6D_AccMag_Shutdown(), fsl_mag3110_i2c_3D_mag_Shutdown(), fsl_mma8491q_i2c_3D_accel_Shutdown(), fsl_mma865x_i2c_3D_accel_Shutdown(), fsl_mma955x_Configure(), fsl_mma955x_Shutdown(), fsl_mpl3115_i2c_1D_press_Shutdown(), and rli_ci_app_callback().
uint32 bm_update_cb_list | ( | void | ) |
Definition at line 504 of file bus_management.c.
References BM_CURRENT_PERIOD, bm_find_smallest_active_period(), BM_MINIMUM_CB_TIMELEFT_USEC, bm_t::cb_list_cur_cnt, bm_t::cb_token_active_mask, bm_cb_config_t::Cur_period, gpBm_cb_list, bm_cb_config_t::Period, and bm_t::time_keeper_usec.
Referenced by bm_start(), and isr_bm_callback_tmr().
void isf_system_sync | ( | void | ) |
This function synchronizes the user tasks and the system initialization.
Definition at line 50 of file isf_init.c.
Referenced by App1_task(), BasicApp1_MainTask(), BM_task(), and RLI1_MainTask().
OSA_TASK_DEFINE | ( | BM | , |
BM_TASK_STACK_SIZE | |||
) |
void swdelay | ( | int32 | cnt | ) |
void task_bm | ( | uint32 | initial_data | ) |
Bus Manager Task - main task to handle communication
via mailboxes with the host.
initial_data | - value passed in when task is created, not used. |
Definition at line 673 of file bus_management.c.
References bm_t::cb_token_active_mask, event_bm_callback, FALSE, gpBm_cb_list, and bm_cb_config_t::pCallback.
Referenced by BM_task().
bm_t bm |
Definition at line 45 of file bus_management.c.
BM_STATIC event_t event_bm_callback |
Definition at line 36 of file bus_management.c.
Referenced by bm_init(), isr_bm_callback_tmr(), and task_bm().
BM_STATIC BM_VOLATILE bool gBm_cb_occurred = FALSE |
Definition at line 42 of file bus_management.c.
Referenced by bm_cb_occurred_query(), bm_powerdown(), and isr_bm_callback_tmr().
BM_STATIC BM_VOLATILE bool gBm_firsttime_flag = FALSE |
Definition at line 40 of file bus_management.c.
BM_STATIC BM_VOLATILE bool gBm_state_change = FALSE |
Definition at line 41 of file bus_management.c.
Referenced by bm_powerdown(), bm_register_periodic_callback(), bm_statechange_query(), bm_statechange_reset(), bm_stop(), and bm_unregister_callback().
BM_STATIC BM_VOLATILE bm_cb_config_t* gpBm_cb_list[MAX_BM_CALLBACKS] |
Definition at line 39 of file bus_management.c.
Referenced by bm_find_cb(), bm_find_smallest_active_period(), bm_init(), bm_register_periodic_callback(), bm_reset_period(), bm_sort_cb_list(), bm_unregister_callback(), bm_update_cb_list(), isr_bm_callback_tmr(), and task_bm().
BM_STATIC semaphore_t sema_bm_access |
Definition at line 37 of file bus_management.c.
Referenced by bm_active_cb_query(), bm_get_num_callback(), bm_init(), bm_register_periodic_callback(), bm_start(), bm_statechange_reset(), bm_stop(), and bm_unregister_callback().