|
Radio Control Layer (RCL)
|
#include <stdint.h>#include <stddef.h>#include <stdbool.h>#include <string.h>#include <ti/drivers/rcl/hal/hal.h>#include <ti/drivers/rcl/RCL.h>#include <ti/drivers/rcl/LRF.h>#include <ti/drivers/rcl/RCL_Scheduler.h>#include <ti/drivers/rcl/RCL_Profiling.h>#include <ti/drivers/rcl/RCL_Tracer.h>#include <ti/drivers/rcl/RCL_Debug.h>#include <ti/drivers/dpl/SemaphoreP.h>#include <ti/drivers/dpl/HwiP.h>#include <ti/log/Log.h>
Include dependency graph for RCL.c:Functions | |
| static void | rclCommandHwi (void) |
| static void | rclDispatchHwi (void) |
| static void | rclSchedulerHwi (void) |
| static void | rclPowerNotify (RCL_PowerEvent eventType) |
| RCL_StopType | policyHook (RCL_Command *currentCmd, RCL_Command *newCmd) |
| Hook function to determine what stop type the ongoing command should get. More... | |
| void | phyHook (RCL *rclState, RCL_Handle client, RCL_Command *cmd) |
| Hook function to allow dynamic PHY change. More... | |
| void | scheduleHook (RCL_SchedulerState *rclSchedulerState, RCL_Handle client, RCL_Command *cmd) |
| Hook function to schedule new command. More... | |
| __attribute__ ((weak)) | |
| int | RCL_init (void) |
| Initializes the RCL driver state. More... | |
| RCL_Handle | RCL_open (RCL_Client *c, const LRF_Config *lrfConfig) |
| Initializes an RCL client instance. More... | |
| void | RCL_close (RCL_Handle h) |
| Closes client instance and deallocates open resources. More... | |
| RCL_CommandStatus | RCL_Command_submit (RCL_Handle h, RCL_Command_Handle c) |
| Submit RCL command object to be scheduled for execution. More... | |
| RCL_CommandStatus | RCL_Command_pend (RCL_Command_Handle c) |
| Wait for a submitted command to complete. More... | |
| RCL_CommandStatus | RCL_Command_stop (RCL_Command_Handle c, RCL_StopType stopType) |
| Stop a command. More... | |
| int8_t | RCL_readRssi (void) |
| Get the last valid RSSI value. More... | |
Variables | |
| RCL | rclState |
|
static |
References RCL_SchedulerState::currCmd, hal_cancel_graceful_stop_time(), hal_cancel_hard_stop_time(), hal_cancel_start_time(), hal_check_clear_timer_compare(), hal_disable_radio_interrupts(), hal_get_ifg_reg(), hal_power_release_constraint(), hal_power_set_constraint(), HAL_TIMER_EVT_GRACEFUL_STOP, HAL_TIMER_EVT_HARD_STOP, HAL_TIMER_EVT_SETUP, HAL_TIMER_EVT_START, hal_trigger_dispatch_fsm(), LRF_hardStop(), LRF_setupRadio(), RCL::lrfConfig, RCL::lrfState, RCL_SchedulerState::postedRclEvents, RCL::powerState, RadioState_Configured, RadioState_Down, RadioState_ImagesLoaded, RCL_Command_stop(), RCL_CommandStatus_Descheduled, RCL_CommandStatus_Error_Setup, RCL_CommandStatus_Finished, RCL_CommandStatus_Scheduled, RCL_Debug_assert, RCL_EventNone, RCL_Scheduler_setStopTimes(), RCL_standbyAllow, RCL_standbyDisallow, RCL_StopType_None, rclSchedulerState, rclState, and SetupResult_Ok.
Referenced by RCL_init().
|
static |
|
static |
References RCL_SchedulerState::currCmd, hal_set_systim_imask(), hal_setup_setup_time(), LRF_imagesNeedUpdate(), RCL::lrfConfig, RCL::lrfState, RCL::nextCmd, phyHook(), RadioState_Configured, RadioState_ImagesLoaded, RCL_CommandStatus_Error_StartTooLate, RCL_CommandStatus_Finished, RCL_Debug_assert, RCL_EventSetup, RCL_ProfilingEvent_PostprocStop, RCL_Schedule_Now, RCL_Scheduler_delta(), RCL_Scheduler_getCurrentTime(), RCL_SCHEDULER_MARGIN_ARM, RCL_SCHEDULER_MARGIN_CONFIGURE, RCL_SCHEDULER_MARGIN_LOAD, RCL_Scheduler_postEvent(), RCL_SCHEDULER_SLEEP_CUTOFF, RCL_SCHEDULER_TRIG_NOW_DELAY, RCL_SCHEDULER_WAKEUP_MARGIN, rclSchedulerState, rclState, and scheduleHook().
Referenced by RCL_init().
|
static |
| RCL_StopType policyHook | ( | RCL_Command * | currentCmd, |
| RCL_Command * | newCmd | ||
| ) |
Hook function to determine what stop type the ongoing command should get.
| [in] | currentCmd | Currently running command |
| [in] | newCmd | New command to potentially take its place |
| void phyHook | ( | RCL * | rclState, |
| RCL_Handle | client, | ||
| RCL_Command * | cmd | ||
| ) |
Hook function to allow dynamic PHY change.
Referenced by rclSchedulerHwi().
| void scheduleHook | ( | RCL_SchedulerState * | rclSchedulerState, |
| RCL_Handle | client, | ||
| RCL_Command * | cmd | ||
| ) |
Hook function to schedule new command.
| [in] | rclSchedulerState | Scheduler state |
| [in] | client | Current RCL client |
| [in] | cmd | Command to be scheduled |
Referenced by rclSchedulerHwi().
| __attribute__ | ( | (weak) | ) |
| int RCL_init | ( | ) |
Initializes the RCL driver state.
Resets global state and initialize hardware.
References hal_init_fsm(), RCL::numClients, RadioState_Down, rclCommandHwi(), rclDispatchHwi(), rclSchedulerHwi(), and rclState.
Referenced by RCL_AdcNoise_get_samples_blocking(), and RCL_AdcNoise_get_samples_callback().
| RCL_Handle RCL_open | ( | RCL_Client * | c, |
| const LRF_Config * | lrfConfig | ||
| ) |
Initializes an RCL client instance.
| [in] | c | - Client object struct to be initialized |
| [in] | lrfConfig | - Radio configuration to be used by client |
References hal_enable_clk_buffer(), hal_power_open(), LRF_rclEnableRadioClocks(), RCL::numClients, rclPowerNotify(), and rclState.
Referenced by RCL_AdcNoise_get_samples_blocking(), and RCL_AdcNoise_get_samples_callback().
| void RCL_close | ( | RCL_Handle | h | ) |
Closes client instance and deallocates open resources.
| [in] | h | - Client handle |
References hal_power_close(), LRF_rclDisableRadioClocks(), RCL::lrfConfig, RCL::numClients, and rclState.
Referenced by adcNoiseCallback(), and RCL_AdcNoise_get_samples_blocking().
| RCL_CommandStatus RCL_Command_submit | ( | RCL_Handle | h, |
| RCL_Command_Handle | c | ||
| ) |
Submit RCL command object to be scheduled for execution.
This API returns immediately with either RCL_CommandStatus_Error or the asynchronous current state of the command.
| [in] | h | - Client handle |
| [in] | c | - Command handle |
References RCL_SchedulerState::currCmd, hal_trigger_scheduler_fsm(), RCL::nextCmd, RCL_CommandStatus_Error, RCL_CommandStatus_Error_AlreadySubmitted, RCL_CommandStatus_Finished, RCL_CommandStatus_Idle, rclSchedulerState, and rclState.
Referenced by RCL_AdcNoise_get_samples_blocking(), and RCL_AdcNoise_get_samples_callback().
| RCL_CommandStatus RCL_Command_pend | ( | RCL_Command_Handle | c | ) |
Wait for a submitted command to complete.
Uses SemaphoreP_pend to block in the callers context.
| [in] | c | - Client handle |
References RCL_CommandStatus_Active, and RCL_Debug_assert.
Referenced by RCL_AdcNoise_get_samples_blocking().
| RCL_CommandStatus RCL_Command_stop | ( | RCL_Command_Handle | c, |
| RCL_StopType | stopType | ||
| ) |
Stop a command.
Sends the message to try to stop a command. When the function returns, the command may still be running. Depending on the stop type, the command may stop after some time. RCL_Command_pend may be used to wait for the command to finish.
| c | [in] - Command handle |
| stopType | [in] - Stop type; telling which situations the command will stop |
References RCL_SchedulerStopInfo::apiStopEnabled, RCL_SchedulerState::gracefulStopInfo, RCL_SchedulerState::hardStopInfo, LRF_sendGracefulStop(), LRF_sendHardStop(), RCL::nextCmd, RCL_CommandStatus_Descheduled, RCL_CommandStatus_Finished, RCL_CommandStatus_Queued, RCL_Debug_assert, RCL_EventNone, RCL_Scheduler_postEvent(), RCL_StopType_DescheduleOnly, RCL_StopType_Graceful, RCL_StopType_Hard, RCL_StopType_None, rclSchedulerState, and rclState.
Referenced by rclCommandHwi().
| int8_t RCL_readRssi | ( | void | ) |
Get the last valid RSSI value.
This API returns the last valid RSSI value or a specific error status if the last obtained RSSI value is no longer valid.
References LRF_readRssi(), LRF_RSSI_INVALID, RCL::lrfState, RadioState_Configured, and rclState.
| RCL rclState |
Referenced by RCL_close(), RCL_Command_stop(), RCL_Command_submit(), RCL_init(), RCL_open(), RCL_readRssi(), rclCommandHwi(), rclDispatchHwi(), rclPowerNotify(), and rclSchedulerHwi().