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>
Functions | |
static void | rclCommandHwi (void) |
static void | rclDispatchHwi (void) |
static void | rclSchedulerHwi (void) |
static void | rclPowerNotify (RCL_PowerEvent eventType) |
static RCL_CommandStatus | rclStop (RCL_Command_Handle c, RCL_StopType stopType, RCL_SchedulerStopReason stopReason) |
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)) | |
void | 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, RCL_SchedulerState::descheduleReason, RCL_SchedulerState::gracefulStopInfo, 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(), RCL_SchedulerState::hardStopInfo, LRF_hardStop(), LRF_setupRadio(), RCL::lrfConfig, RCL::lrfState, RCL_SchedulerState::postedRclEvents, RCL::powerState, RadioState_Configured, RadioState_Down, RadioState_ImagesLoaded, RCL_CommandStatus_Error_Setup, RCL_CommandStatus_Finished, RCL_CommandStatus_Scheduled, RCL_Debug_assert, RCL_EventNone, RCL_Scheduler_findStopStatus(), RCL_Scheduler_setStopTimes(), RCL_SchedulerStopReason_Timeout, RCL_standbyAllow, RCL_standbyDisallow, RCL_StopType_DescheduleOnly, RCL_StopType_None, rclSchedulerState, rclStop(), RCL_SchedulerState::requestedPhyFeatures, SetupResult_Ok, and RCL_SchedulerStopInfo::stopReason.
Referenced by RCL_init().
|
static |
|
static |
References RCL_SchedulerState::currCmd, 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, and scheduleHook().
Referenced by RCL_init().
|
static |
|
static |
References RCL_SchedulerStopInfo::apiStopEnabled, RCL_SchedulerState::descheduleReason, RCL_SchedulerState::gracefulStopInfo, RCL_SchedulerState::hardStopInfo, LRF_sendGracefulStop(), LRF_sendHardStop(), RCL::nextCmd, RCL_CommandStatus_Finished, RCL_CommandStatus_Queued, RCL_Debug_assert, RCL_EventNone, RCL_Scheduler_findStopStatus(), RCL_Scheduler_postEvent(), RCL_StopType_DescheduleOnly, RCL_StopType_Graceful, RCL_StopType_Hard, RCL_StopType_None, and RCL_SchedulerStopInfo::stopReason.
Referenced by __attribute__(), RCL_Command_stop(), and rclCommandHwi().
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 |
Referenced by __attribute__().
void phyHook | ( | RCL * | rclState, |
RCL_Handle | client, | ||
RCL_Command * | cmd | ||
) |
Hook function to allow dynamic PHY change.
Referenced by __attribute__(), and 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 __attribute__(), and rclSchedulerHwi().
__attribute__ | ( | (weak) | ) |
References RCL_SchedulerState::currCmd, RCL_SchedulerState::gracefulStopInfo, RCL_SchedulerState::hardStopInfo, RCL_SchedulerState::nextWantsStop, phyHook(), policyHook(), RCL_ConflictPolicy_AlwaysInterrupt, RCL_ConflictPolicy_NeverInterrupt, RCL_ConflictPolicy_Polite, RCL_Schedule_Now, RCL_Scheduler_getCurrentTime(), RCL_Scheduler_isLater(), RCL_SCHEDULER_MARGIN_LOAD, RCL_Scheduler_setSchedStopTime(), RCL_SchedulerStopReason_Scheduling, RCL_StopType_DescheduleOnly, RCL_StopType_Graceful, RCL_StopType_Hard, RCL_StopType_None, rclSchedulerState, rclStop(), and scheduleHook().
Referenced by RCL_close().
void RCL_init | ( | void | ) |
Initializes the RCL driver state.
Resets global state and initialize hardware.
References hal_init_fsm(), hal_temperature_init(), RCL::numClients, RadioState_Down, rclCommandHwi(), rclDispatchHwi(), and rclSchedulerHwi().
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, and rclPowerNotify().
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 __attribute__(), hal_power_close(), LRF_rclDisableRadioClocks(), RCL::lrfConfig, RCL::nextCmd, RCL::numClients, RCL_CommandStatus_Error, and RCL_CommandStatus_Scheduled.
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, and RCL_CommandStatus_Idle.
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_SchedulerStopReason_Api, and rclStop().
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, and RadioState_Configured.
RCL rclState |