git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@7462 35acf78f-673a-0410-8e92-d51de3d6d3f4
parent
a94bfc5f71
commit
69f211ae2c
|
@ -265,13 +265,13 @@ typedef struct {
|
|||
* @note Not implemented in this simplified OSAL.
|
||||
*/
|
||||
#define osalDbgCheckClassI() /*chDbgCheckClassI()*/
|
||||
/** @} */
|
||||
|
||||
/**
|
||||
* @brief S-Class state check.
|
||||
* @note Not implemented in this simplified OSAL.
|
||||
*/
|
||||
#define osalDbgCheckClassS() /*chDbgCheckClassS()*/
|
||||
/** @} */
|
||||
|
||||
/**
|
||||
* @name IRQ service routines wrappers
|
||||
|
@ -325,6 +325,7 @@ typedef struct {
|
|||
* @api
|
||||
*/
|
||||
#define OSAL_MS2ST(msec) MS2ST(msec)
|
||||
|
||||
/**
|
||||
* @brief Microseconds to system ticks.
|
||||
* @details Converts from microseconds to system ticks number.
|
||||
|
@ -539,7 +540,7 @@ static inline void osalOsRescheduleS(void) {
|
|||
|
||||
/**
|
||||
* @brief Current system time.
|
||||
* @details Returns the number of system ticks since the @p chSysInit()
|
||||
* @details Returns the number of system ticks since the @p osalInit()
|
||||
* invocation.
|
||||
* @note The counter can reach its maximum and then restart from zero.
|
||||
* @note This function can be called from any context but its atomicity
|
||||
|
|
|
@ -261,13 +261,13 @@ typedef struct {
|
|||
* @note Not implemented in this simplified OSAL.
|
||||
*/
|
||||
#define osalDbgCheckClassI() chDbgCheckClassI()
|
||||
/** @} */
|
||||
|
||||
/**
|
||||
* @brief S-Class state check.
|
||||
* @note Not implemented in this simplified OSAL.
|
||||
*/
|
||||
#define osalDbgCheckClassS() chDbgCheckClassS()
|
||||
/** @} */
|
||||
|
||||
/**
|
||||
* @name IRQ service routines wrappers
|
||||
|
@ -535,7 +535,7 @@ static inline void osalOsRescheduleS(void) {
|
|||
|
||||
/**
|
||||
* @brief Current system time.
|
||||
* @details Returns the number of system ticks since the @p chSysInit()
|
||||
* @details Returns the number of system ticks since the @p osalInit()
|
||||
* invocation.
|
||||
* @note The counter can reach its maximum and then restart from zero.
|
||||
* @note This function can be called from any context but its atomicity
|
||||
|
|
|
@ -22,7 +22,6 @@
|
|||
* @{
|
||||
*/
|
||||
|
||||
#include "ch.h"
|
||||
#include "hal.h"
|
||||
|
||||
/*===========================================================================*/
|
||||
|
|
|
@ -357,12 +357,12 @@
|
|||
/*===========================================================================*/
|
||||
|
||||
/**
|
||||
* @brief Type representing I2C address.
|
||||
* @brief Type representing an I2C address.
|
||||
*/
|
||||
typedef uint16_t i2caddr_t;
|
||||
|
||||
/**
|
||||
* @brief I2C Driver condition flags type.
|
||||
* @brief Type of I2C driver condition flags.
|
||||
*/
|
||||
typedef uint32_t i2cflags_t;
|
||||
|
||||
|
@ -385,9 +385,10 @@ typedef enum {
|
|||
} i2cdutycycle_t;
|
||||
|
||||
/**
|
||||
* @brief Driver configuration structure.
|
||||
* @brief Type of I2C driver configuration structure.
|
||||
*/
|
||||
typedef struct {
|
||||
/* End of the mandatory fields.*/
|
||||
i2copmode_t op_mode; /**< @brief Specifies the I2C mode. */
|
||||
uint32_t clock_speed; /**< @brief Specifies the clock frequency.
|
||||
@note Must be set to a value lower
|
||||
|
|
|
@ -81,7 +81,7 @@ I2CDriver I2CD2;
|
|||
#endif
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Driver local variables. */
|
||||
/* Driver local variables and types. */
|
||||
/*===========================================================================*/
|
||||
|
||||
/*===========================================================================*/
|
||||
|
|
|
@ -216,17 +216,17 @@
|
|||
/*===========================================================================*/
|
||||
|
||||
/**
|
||||
* @brief Type representing I2C address.
|
||||
* @brief Type representing an I2C address.
|
||||
*/
|
||||
typedef uint16_t i2caddr_t;
|
||||
|
||||
/**
|
||||
* @brief I2C Driver condition flags type.
|
||||
* @brief Type of I2C driver condition flags.
|
||||
*/
|
||||
typedef uint32_t i2cflags_t;
|
||||
|
||||
/**
|
||||
* @brief Driver configuration structure.
|
||||
* @brief Type of I2C driver configuration structure.
|
||||
*/
|
||||
typedef struct {
|
||||
/**
|
||||
|
@ -255,7 +255,7 @@ typedef struct I2CDriver I2CDriver;
|
|||
/**
|
||||
* @brief Structure representing an I2C driver.
|
||||
*/
|
||||
struct I2CDriver{
|
||||
struct I2CDriver {
|
||||
/**
|
||||
* @brief Driver state.
|
||||
*/
|
||||
|
|
|
@ -396,8 +396,8 @@ void mac_lld_stop(MACDriver *macp) {
|
|||
* @param[in] macp pointer to the @p MACDriver object
|
||||
* @param[out] tdp pointer to a @p MACTransmitDescriptor structure
|
||||
* @return The operation status.
|
||||
* @retval RDY_OK the descriptor has been obtained.
|
||||
* @retval RDY_TIMEOUT descriptor not available.
|
||||
* @retval MSG_OK the descriptor has been obtained.
|
||||
* @retval MSG_TIMEOUT descriptor not available.
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
|
@ -472,8 +472,8 @@ void mac_lld_release_transmit_descriptor(MACTransmitDescriptor *tdp) {
|
|||
* @param[in] macp pointer to the @p MACDriver object
|
||||
* @param[out] rdp pointer to a @p MACReceiveDescriptor structure
|
||||
* @return The operation status.
|
||||
* @retval RDY_OK the descriptor has been obtained.
|
||||
* @retval RDY_TIMEOUT descriptor not available.
|
||||
* @retval MSG_OK the descriptor has been obtained.
|
||||
* @retval MSG_TIMEOUT descriptor not available.
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
|
|
|
@ -169,7 +169,7 @@ static void wait(MMCDriver *mmcp) {
|
|||
break;
|
||||
#ifdef MMC_NICE_WAITING
|
||||
/* Trying to be nice with the other threads.*/
|
||||
chThdSleep(1);
|
||||
osalThreadSleep(1);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
@ -348,7 +348,8 @@ static void sync(MMCDriver *mmcp) {
|
|||
if (buf[0] == 0xFF)
|
||||
break;
|
||||
#ifdef MMC_NICE_WAITING
|
||||
chThdSleep(1); /* Trying to be nice with the other threads.*/
|
||||
/* Trying to be nice with the other threads.*/
|
||||
osalThreadSleep(1);
|
||||
#endif
|
||||
}
|
||||
spiUnselect(mmcp->config->spip);
|
||||
|
@ -460,7 +461,7 @@ bool mmcConnect(MMCDriver *mmcp) {
|
|||
break;
|
||||
if (++i >= MMC_CMD0_RETRY)
|
||||
goto failed;
|
||||
chThdSleepMilliseconds(10);
|
||||
osalThreadSleepMilliseconds(10);
|
||||
}
|
||||
|
||||
/* Try to detect if this is a high capacity card and switch to block
|
||||
|
@ -480,7 +481,7 @@ bool mmcConnect(MMCDriver *mmcp) {
|
|||
|
||||
if (++i >= MMC_ACMD41_RETRY)
|
||||
goto failed;
|
||||
chThdSleepMilliseconds(10);
|
||||
osalThreadSleepMilliseconds(10);
|
||||
}
|
||||
|
||||
/* Execute dedicated read on OCR register */
|
||||
|
@ -501,7 +502,7 @@ bool mmcConnect(MMCDriver *mmcp) {
|
|||
goto failed;
|
||||
if (++i >= MMC_CMD1_RETRY)
|
||||
goto failed;
|
||||
chThdSleepMilliseconds(10);
|
||||
osalThreadSleepMilliseconds(10);
|
||||
}
|
||||
|
||||
/* Initialization complete, full speed.*/
|
||||
|
|
|
@ -86,7 +86,7 @@ bool _sdc_wait_for_transfer_state(SDCDriver *sdcp) {
|
|||
case MMCSD_STS_RCV:
|
||||
case MMCSD_STS_PRG:
|
||||
#if SDC_NICE_WAITING
|
||||
osalThreadSleep(MS2ST(1));
|
||||
osalThreadSleep(OSAL_MS2ST(1));
|
||||
#endif
|
||||
continue;
|
||||
default:
|
||||
|
@ -262,7 +262,7 @@ bool sdcConnect(SDCDriver *sdcp) {
|
|||
}
|
||||
if (++i >= SDC_INIT_RETRY)
|
||||
goto failed;
|
||||
osalThreadSleep(MS2ST(10));
|
||||
osalThreadSleep(OSAL_MS2ST(10));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -15,14 +15,13 @@
|
|||
*/
|
||||
|
||||
/**
|
||||
* @file templates/adc_lld.c
|
||||
* @brief ADC Driver subsystem low level driver source template.
|
||||
* @file adc_lld.c
|
||||
* @brief PLATFORM ADC subsystem low level driver source.
|
||||
*
|
||||
* @addtogroup ADC
|
||||
* @{
|
||||
*/
|
||||
|
||||
#include "ch.h"
|
||||
#include "hal.h"
|
||||
|
||||
#if HAL_USE_ADC || defined(__DOXYGEN__)
|
||||
|
|
|
@ -15,8 +15,8 @@
|
|||
*/
|
||||
|
||||
/**
|
||||
* @file PLATFORMF/adc_lld.h
|
||||
* @brief PLATFORMF ADC subsystem low level driver header.
|
||||
* @file adc_lld.h
|
||||
* @brief PLATFORM ADC subsystem low level driver header.
|
||||
*
|
||||
* @addtogroup ADC
|
||||
* @{
|
||||
|
|
|
@ -15,14 +15,13 @@
|
|||
*/
|
||||
|
||||
/**
|
||||
* @file templates/can_lld.c
|
||||
* @brief CAN Driver subsystem low level driver source template.
|
||||
* @file can_lld.c
|
||||
* @brief PLATFORM CAN subsystem low level driver source.
|
||||
*
|
||||
* @addtogroup CAN
|
||||
* @{
|
||||
*/
|
||||
|
||||
#include "ch.h"
|
||||
#include "hal.h"
|
||||
|
||||
#if HAL_USE_CAN || defined(__DOXYGEN__)
|
||||
|
@ -125,7 +124,7 @@ void can_lld_stop(CANDriver *canp) {
|
|||
*
|
||||
* @notapi
|
||||
*/
|
||||
bool_t can_lld_is_tx_empty(CANDriver *canp, canmbx_t mailbox) {
|
||||
bool can_lld_is_tx_empty(CANDriver *canp, canmbx_t mailbox) {
|
||||
|
||||
(void)canp;
|
||||
|
||||
|
@ -174,7 +173,7 @@ void can_lld_transmit(CANDriver *canp,
|
|||
*
|
||||
* @notapi
|
||||
*/
|
||||
bool_t can_lld_is_rx_nonempty(CANDriver *canp, canmbx_t mailbox) {
|
||||
bool can_lld_is_rx_nonempty(CANDriver *canp, canmbx_t mailbox) {
|
||||
|
||||
(void)canp;
|
||||
(void)mailbox;
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
*/
|
||||
|
||||
/**
|
||||
* @file PLATFORM/can_lld.h
|
||||
* @file can_lld.h
|
||||
* @brief PLATFORM CAN subsystem low level driver header.
|
||||
*
|
||||
* @addtogroup CAN
|
||||
|
|
|
@ -15,14 +15,13 @@
|
|||
*/
|
||||
|
||||
/**
|
||||
* @file templates/ext_lld.c
|
||||
* @brief EXT Driver subsystem low level driver source template.
|
||||
* @file ext_lld.c
|
||||
* @brief PLATFORM EXT subsystem low level driver source.
|
||||
*
|
||||
* @addtogroup EXT
|
||||
* @{
|
||||
*/
|
||||
|
||||
#include "ch.h"
|
||||
#include "hal.h"
|
||||
|
||||
#if HAL_USE_EXT || defined(__DOXYGEN__)
|
||||
|
|
|
@ -15,8 +15,8 @@
|
|||
*/
|
||||
|
||||
/**
|
||||
* @file templates/ext_lld.h
|
||||
* @brief EXT Driver subsystem low level driver header template.
|
||||
* @file ext_lld.h
|
||||
* @brief PLATFORM EXT subsystem low level driver header.
|
||||
*
|
||||
* @addtogroup EXT
|
||||
* @{
|
||||
|
|
|
@ -15,14 +15,13 @@
|
|||
*/
|
||||
|
||||
/**
|
||||
* @file templates/gpt_lld.c
|
||||
* @brief GPT Driver subsystem low level driver source template.
|
||||
* @file gpt_lld.c
|
||||
* @brief PLATFORM GPT subsystem low level driver source.
|
||||
*
|
||||
* @addtogroup GPT
|
||||
* @{
|
||||
*/
|
||||
|
||||
#include "ch.h"
|
||||
#include "hal.h"
|
||||
|
||||
#if HAL_USE_GPT || defined(__DOXYGEN__)
|
||||
|
|
|
@ -15,8 +15,8 @@
|
|||
*/
|
||||
|
||||
/**
|
||||
* @file templates/gpt_lld.h
|
||||
* @brief GPT Driver subsystem low level driver header template.
|
||||
* @file gpt_lld.h
|
||||
* @brief PLATFORM GPT subsystem low level driver header.
|
||||
*
|
||||
* @addtogroup GPT
|
||||
* @{
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
*/
|
||||
|
||||
/**
|
||||
* @file PLATFORM/hal_lld.c
|
||||
* @file hal_lld.c
|
||||
* @brief PLATFORM HAL subsystem low level driver source.
|
||||
*
|
||||
* @addtogroup HAL
|
||||
|
|
|
@ -15,7 +15,8 @@
|
|||
*/
|
||||
|
||||
/**
|
||||
* @file PLATFORM/hal_lld.h
|
||||
* @file hal_lld.h
|
||||
* @brief PLATFORM HAL subsystem low level driver header.
|
||||
*
|
||||
* @addtogroup HAL
|
||||
* @{
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
ChibiOS/RT - Copyright (C) 2006-2013 Giovanni Di Sirio
|
||||
ChibiOS/HAL - Copyright (C) 2006-2014 Giovanni Di Sirio
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
|
@ -15,14 +15,13 @@
|
|||
*/
|
||||
|
||||
/**
|
||||
* @file templates/i2c_lld.c
|
||||
* @brief I2C Driver subsystem low level driver source template.
|
||||
* @file i2c_lld.c
|
||||
* @brief PLATFORM I2C subsystem low level driver source.
|
||||
*
|
||||
* @addtogroup I2C
|
||||
* @{
|
||||
*/
|
||||
|
||||
#include "ch.h"
|
||||
#include "hal.h"
|
||||
|
||||
#if HAL_USE_I2C || defined(__DOXYGEN__)
|
||||
|
@ -87,7 +86,6 @@ void i2c_lld_start(I2CDriver *i2cp) {
|
|||
}
|
||||
#endif /* PLATFORM_I2C_USE_I2C1 */
|
||||
}
|
||||
/* Configures the peripheral.*/
|
||||
|
||||
}
|
||||
|
||||
|
@ -101,7 +99,6 @@ void i2c_lld_start(I2CDriver *i2cp) {
|
|||
void i2c_lld_stop(I2CDriver *i2cp) {
|
||||
|
||||
if (i2cp->state != I2C_STOP) {
|
||||
/* Resets the peripheral.*/
|
||||
|
||||
/* Disables the peripheral.*/
|
||||
#if PLATFORM_I2C_USE_I2C1
|
||||
|
@ -114,8 +111,6 @@ void i2c_lld_stop(I2CDriver *i2cp) {
|
|||
|
||||
/**
|
||||
* @brief Receives data via the I2C bus as master.
|
||||
* @details Number of receiving bytes must be more than 1 on STM32F1x. This is
|
||||
* hardware restriction.
|
||||
*
|
||||
* @param[in] i2cp pointer to the @p I2CDriver object
|
||||
* @param[in] addr slave device address
|
||||
|
@ -126,10 +121,10 @@ void i2c_lld_stop(I2CDriver *i2cp) {
|
|||
* - @a TIME_INFINITE no timeout.
|
||||
* .
|
||||
* @return The operation status.
|
||||
* @retval RDY_OK if the function succeeded.
|
||||
* @retval RDY_RESET if one or more I2C errors occurred, the errors can
|
||||
* @retval MSG_OK if the function succeeded.
|
||||
* @retval MSG_RESET if one or more I2C errors occurred, the errors can
|
||||
* be retrieved using @p i2cGetErrors().
|
||||
* @retval RDY_TIMEOUT if a timeout occurred before operation end. <b>After a
|
||||
* @retval MSG_TIMEOUT if a timeout occurred before operation end. <b>After a
|
||||
* timeout the driver must be stopped and restarted
|
||||
* because the bus is in an uncertain state</b>.
|
||||
*
|
||||
|
@ -145,13 +140,11 @@ msg_t i2c_lld_master_receive_timeout(I2CDriver *i2cp, i2caddr_t addr,
|
|||
(void)rxbytes;
|
||||
(void)timeout;
|
||||
|
||||
return RDY_OK;
|
||||
return MSG_OK;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Transmits data via the I2C bus as master.
|
||||
* @details Number of receiving bytes must be 0 or more than 1 on STM32F1x.
|
||||
* This is hardware restriction.
|
||||
*
|
||||
* @param[in] i2cp pointer to the @p I2CDriver object
|
||||
* @param[in] addr slave device address
|
||||
|
@ -164,10 +157,10 @@ msg_t i2c_lld_master_receive_timeout(I2CDriver *i2cp, i2caddr_t addr,
|
|||
* - @a TIME_INFINITE no timeout.
|
||||
* .
|
||||
* @return The operation status.
|
||||
* @retval RDY_OK if the function succeeded.
|
||||
* @retval RDY_RESET if one or more I2C errors occurred, the errors can
|
||||
* @retval MSG_OK if the function succeeded.
|
||||
* @retval MSG_RESET if one or more I2C errors occurred, the errors can
|
||||
* be retrieved using @p i2cGetErrors().
|
||||
* @retval RDY_TIMEOUT if a timeout occurred before operation end. <b>After a
|
||||
* @retval MSG_TIMEOUT if a timeout occurred before operation end. <b>After a
|
||||
* timeout the driver must be stopped and restarted
|
||||
* because the bus is in an uncertain state</b>.
|
||||
*
|
||||
|
@ -186,7 +179,7 @@ msg_t i2c_lld_master_transmit_timeout(I2CDriver *i2cp, i2caddr_t addr,
|
|||
(void)rxbytes;
|
||||
(void)timeout;
|
||||
|
||||
return RDY_OK;
|
||||
return MSG_OK;
|
||||
}
|
||||
|
||||
#endif /* HAL_USE_I2C */
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
ChibiOS/RT - Copyright (C) 2006-2013 Giovanni Di Sirio
|
||||
ChibiOS/HAL - Copyright (C) 2006-2014 Giovanni Di Sirio
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
|
@ -15,8 +15,8 @@
|
|||
*/
|
||||
|
||||
/**
|
||||
* @file templates/i2c_lld.h
|
||||
* @brief I2C Driver subsystem low level driver header template.
|
||||
* @file i2c_lld.h
|
||||
* @brief PLATFORM I2C subsystem low level driver header.
|
||||
*
|
||||
* @addtogroup I2C
|
||||
* @{
|
||||
|
@ -58,7 +58,7 @@
|
|||
/*===========================================================================*/
|
||||
|
||||
/**
|
||||
* @brief Type representing I2C address.
|
||||
* @brief Type representing an I2C address.
|
||||
*/
|
||||
typedef uint16_t i2caddr_t;
|
||||
|
||||
|
@ -68,15 +68,12 @@ typedef uint16_t i2caddr_t;
|
|||
typedef uint32_t i2cflags_t;
|
||||
|
||||
/**
|
||||
* @brief Driver configuration structure.
|
||||
* @brief Type of I2C driver configuration structure.
|
||||
* @note Implementations may extend this structure to contain more,
|
||||
* architecture dependent, fields.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @brief Driver configuration structure.
|
||||
*/
|
||||
typedef struct {
|
||||
/* End of the mandatory fields.*/
|
||||
uint32_t dummy;
|
||||
} I2CConfig;
|
||||
|
||||
|
@ -102,14 +99,7 @@ struct I2CDriver {
|
|||
*/
|
||||
i2cflags_t errors;
|
||||
#if I2C_USE_MUTUAL_EXCLUSION || defined(__DOXYGEN__)
|
||||
#if CH_USE_MUTEXES || defined(__DOXYGEN__)
|
||||
/**
|
||||
* @brief Mutex protecting the bus.
|
||||
*/
|
||||
Mutex mutex;
|
||||
#elif CH_USE_SEMAPHORES
|
||||
Semaphore semaphore;
|
||||
#endif
|
||||
mutex_t mutex;
|
||||
#endif /* I2C_USE_MUTUAL_EXCLUSION */
|
||||
#if defined(I2C_DRIVER_EXT_FIELDS)
|
||||
I2C_DRIVER_EXT_FIELDS
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
*/
|
||||
|
||||
/**
|
||||
* @file PLATFORM/i2s_lld.c
|
||||
* @file i2s_lld.c
|
||||
* @brief PLATFORM I2S subsystem low level driver source.
|
||||
*
|
||||
* @addtogroup I2S
|
||||
|
|
|
@ -13,14 +13,10 @@
|
|||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
/*
|
||||
Concepts and parts of this file have been contributed by Fabio Utzig and
|
||||
Xo Wang.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file PLATFORM/icu_lld.c
|
||||
* @brief PLATFORM ICU subsystem low level driver header.
|
||||
* @file icu_lld.c
|
||||
* @brief PLATFORM ADC subsystem low level driver source.
|
||||
*
|
||||
* @addtogroup ICU
|
||||
* @{
|
||||
|
@ -91,6 +87,7 @@ void icu_lld_start(ICUDriver *icup) {
|
|||
|
||||
}
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -109,6 +106,7 @@ void icu_lld_stop(ICUDriver *icup) {
|
|||
|
||||
}
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
*/
|
||||
|
||||
/**
|
||||
* @file PLATFORM/icu_lld.h
|
||||
* @file icu_lld.h
|
||||
* @brief PLATFORM ICU subsystem low level driver header.
|
||||
*
|
||||
* @addtogroup ICU
|
||||
|
|
|
@ -15,8 +15,8 @@
|
|||
*/
|
||||
|
||||
/**
|
||||
* @file PLATFORM/mac_lld.c
|
||||
* @brief PLATFORM low level MAC driver code.
|
||||
* @file mac_lld.c
|
||||
* @brief PLATFORM MAC subsystem low level driver source.
|
||||
*
|
||||
* @addtogroup MAC
|
||||
* @{
|
||||
|
@ -169,7 +169,7 @@ msg_t mac_lld_get_receive_descriptor(MACDriver *macp,
|
|||
(void)macp;
|
||||
(void)rdp;
|
||||
|
||||
return RDY_OK;
|
||||
return MSG_OK;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -197,7 +197,7 @@ void mac_lld_release_receive_descriptor(MACReceiveDescriptor *rdp) {
|
|||
*
|
||||
* @notapi
|
||||
*/
|
||||
bool_t mac_lld_poll_link_status(MACDriver *macp) {
|
||||
bool mac_lld_poll_link_status(MACDriver *macp) {
|
||||
|
||||
(void)macp;
|
||||
|
||||
|
|
|
@ -15,8 +15,8 @@
|
|||
*/
|
||||
|
||||
/**
|
||||
* @file PLATFORM/mac_lld.h
|
||||
* @brief PLATFORM low level MAC driver header.
|
||||
* @file mac_lld.h
|
||||
* @brief PLATFORM MAC subsystem low level driver header.
|
||||
*
|
||||
* @addtogroup MAC
|
||||
* @{
|
||||
|
|
|
@ -76,58 +76,38 @@ __attribute__((weak, noreturn))
|
|||
#endif
|
||||
void osalSysHalt(const char *reason) {
|
||||
|
||||
osalIsrDisable();
|
||||
osalSysDisable();
|
||||
osal_halt_msg = reason;
|
||||
while (1)
|
||||
;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Enqueues the caller thread.
|
||||
* @details The caller thread is enqueued and put to sleep until it is
|
||||
* dequeued or the specified timeouts expires.
|
||||
* @brief Dequeues and wakes up one thread from the queue, if any.
|
||||
*
|
||||
* @param[in] tqp pointer to the threads queue object
|
||||
* @param[in] time the timeout in system ticks, the special values are
|
||||
* handled as follow:
|
||||
* - @a TIME_INFINITE the thread enters an infinite sleep
|
||||
* state.
|
||||
* - @a TIME_IMMEDIATE the thread is not enqueued and
|
||||
* the function returns @p MSG_TIMEOUT as if a timeout
|
||||
* occurred.
|
||||
* .
|
||||
* @return The message from @p osalQueueWakeupOneI() or
|
||||
* @p osalQueueWakeupAllI() functions.
|
||||
* @retval RDY_TIMEOUT if the thread has not been dequeued within the
|
||||
* specified timeout or if the function has been
|
||||
* invoked with @p TIME_IMMEDIATE as timeout
|
||||
* specification.
|
||||
* @param[in] msg the message code
|
||||
*
|
||||
* @sclass
|
||||
* @iclass
|
||||
*/
|
||||
msg_t osalQueueGoSleepTimeoutS(threads_queue_t *tqp, systime_t time) {
|
||||
msg_t msg;
|
||||
virtual_timer_t vt;
|
||||
void osalThreadDequeueNextI(threads_queue_t *tqp, msg_t msg) {
|
||||
|
||||
void wakeup(void *p) {
|
||||
osalSysLockFromISR();
|
||||
osalThreadResumeI((thread_reference_t *)p, MSG_TIMEOUT);
|
||||
osalSysUnlockFromISR();
|
||||
}
|
||||
(void)tqp;
|
||||
(void)msg;
|
||||
}
|
||||
|
||||
if (TIME_IMMEDIATE == time)
|
||||
return MSG_TIMEOUT;
|
||||
/**
|
||||
* @brief Dequeues and wakes up all threads from the queue.
|
||||
*
|
||||
* @param[in] tqp pointer to the threads queue object
|
||||
* @param[in] msg the message code
|
||||
*
|
||||
* @iclass
|
||||
*/
|
||||
void osalThreadDequeueAllI(threads_queue_t *tqp, msg_t msg) {
|
||||
|
||||
tqp->tr = NULL;
|
||||
|
||||
if (TIME_INFINITE == time)
|
||||
return osalThreadSuspendS(&tqp->tr);
|
||||
|
||||
osalVTSetI(&vt, time, wakeup, (void *)&tqp->tr);
|
||||
msg = osalThreadSuspendS(&tqp->tr);
|
||||
if (osalVTIsArmedI(&vt))
|
||||
osalVTResetI(&vt);
|
||||
return msg;
|
||||
(void)tqp;
|
||||
(void)msg;
|
||||
}
|
||||
|
||||
/** @} */
|
||||
|
|
|
@ -58,6 +58,7 @@
|
|||
#define MSG_TIMEOUT -2
|
||||
/** @} */
|
||||
|
||||
|
||||
/**
|
||||
* @name Special time constants
|
||||
* @{
|
||||
|
@ -66,6 +67,35 @@
|
|||
#define TIME_INFINITE ((systime_t)-1)
|
||||
/** @} */
|
||||
|
||||
/**
|
||||
* @name Systick modes.
|
||||
* @{
|
||||
*/
|
||||
#define OSAL_ST_MODE_NONE 0
|
||||
#define OSAL_ST_MODE_PERIODIC 1
|
||||
#define OSAL_ST_MODE_FREERUNNING 2
|
||||
/** @} */
|
||||
|
||||
/**
|
||||
* @name Systick parameters.
|
||||
* @{
|
||||
*/
|
||||
/**
|
||||
* @brief Size in bits of the @p systick_t type.
|
||||
*/
|
||||
#define OSAL_ST_RESOLUTION 32
|
||||
|
||||
/**
|
||||
* @brief Required systick frequency or resolution.
|
||||
*/
|
||||
#define OSAL_ST_FREQUENCY 1000
|
||||
|
||||
/**
|
||||
* @brief Systick mode required by the underlying OS.
|
||||
*/
|
||||
#define OSAL_ST_MODE OSAL_ST_MODE_PERIODIC
|
||||
/** @} */
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Module pre-compile time settings. */
|
||||
/*===========================================================================*/
|
||||
|
@ -79,9 +109,9 @@
|
|||
/*===========================================================================*/
|
||||
|
||||
/**
|
||||
* @brief Type of a machine status register.
|
||||
* @brief Type of a system status word.
|
||||
*/
|
||||
typedef uint32_t osal_sts_t;
|
||||
typedef uint32_t syssts_t;
|
||||
|
||||
/**
|
||||
* @brief Type of a message.
|
||||
|
@ -93,16 +123,16 @@ typedef int32_t msg_t;
|
|||
*/
|
||||
typedef uint32_t systime_t;
|
||||
|
||||
/**
|
||||
* @brief Type of realtime counter.
|
||||
*/
|
||||
typedef uint32_t rtcnt_t;
|
||||
|
||||
/**
|
||||
* @brief Type of a thread reference.
|
||||
*/
|
||||
typedef void * thread_reference_t;
|
||||
|
||||
/**
|
||||
* @brief Type of an event flags mask.
|
||||
*/
|
||||
typedef uint32_t eventflags_t;
|
||||
|
||||
/**
|
||||
* @brief Type of an event flags object.
|
||||
* @note The content of this structure is not part of the API and should
|
||||
|
@ -111,10 +141,33 @@ typedef uint32_t eventflags_t;
|
|||
* @note Retrieval and clearing of the flags are not defined in this
|
||||
* API and are implementation-dependent.
|
||||
*/
|
||||
typedef struct {
|
||||
volatile eventflags_t flags; /**< @brief Flags stored into the
|
||||
object. */
|
||||
} event_source_t;
|
||||
typedef struct event_source event_source_t;
|
||||
|
||||
/**
|
||||
* @brief Type of an event source callback.
|
||||
* @note This type is not part of the OSAL API and is provided
|
||||
* exclusively as an example and for convenience.
|
||||
*/
|
||||
typedef void (*eventcallback_t)(event_source_t *);
|
||||
|
||||
/**
|
||||
* @brief Type of an event flags mask.
|
||||
*/
|
||||
typedef uint32_t eventflags_t;
|
||||
|
||||
/**
|
||||
* @brief Events source object.
|
||||
* @note The content of this structure is not part of the API and should
|
||||
* not be relied upon. Implementers may define this structure in
|
||||
* an entirely different way.
|
||||
* @note Retrieval and clearing of the flags are not defined in this
|
||||
* API and are implementation-dependent.
|
||||
*/
|
||||
struct event_source {
|
||||
volatile eventflags_t flags; /**< @brief Stored event flags. */
|
||||
eventcallback_t cb; /**< @brief Event source callback. */
|
||||
void *param; /**< @brief User defined field. */
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief Type of a mutex.
|
||||
|
@ -127,8 +180,8 @@ typedef uint32_t mutex_t;
|
|||
* @brief Type of a thread queue.
|
||||
* @details A thread queue is a queue of sleeping threads, queued threads
|
||||
* can be dequeued one at time or all together.
|
||||
* @note In this implementation it is implemented as a single reference
|
||||
* because there are no real threads.
|
||||
* @note If the OSAL is implemented on a bare metal machine withou RTOS
|
||||
* then the queue can be implemented as a single thread reference.
|
||||
*/
|
||||
typedef struct {
|
||||
thread_reference_t tr;
|
||||
|
@ -138,24 +191,25 @@ typedef struct {
|
|||
/* Module macros. */
|
||||
/*===========================================================================*/
|
||||
|
||||
/**
|
||||
* @name Debug related macros
|
||||
* @{
|
||||
*/
|
||||
/**
|
||||
* @brief Condition assertion.
|
||||
* @details If the condition check fails then the OSAL panics with the
|
||||
* specified message and halts.
|
||||
* @details If the condition check fails then the OSAL panics with a
|
||||
* message and halts.
|
||||
* @note The condition is tested only if the @p OSAL_ENABLE_ASSERTIONS
|
||||
* switch is enabled.
|
||||
* @note The convention for the message is the following:<br>
|
||||
* @<function_name@>(), #@<assert_number@>
|
||||
* @note The remark string is not currently used except for putting a
|
||||
* comment in the code about the assertion.
|
||||
*
|
||||
* @param[in] c the condition to be verified to be true
|
||||
* @param[in] msg the text message
|
||||
* @param[in] remark a remark string
|
||||
*
|
||||
* @api
|
||||
*/
|
||||
#define osalDbgAssert(c, msg, remark)
|
||||
#define osalDbgAssert(c, remark)
|
||||
|
||||
/**
|
||||
* @brief Function parameters check.
|
||||
|
@ -171,16 +225,21 @@ typedef struct {
|
|||
|
||||
/**
|
||||
* @brief I-Class state check.
|
||||
* @note Not implemented in this simplified OSAL.
|
||||
* @note Implementation is optional.
|
||||
*/
|
||||
#define osalDbgCheckClassI()
|
||||
|
||||
/**
|
||||
* @brief S-Class state check.
|
||||
* @note Not implemented in this simplified OSAL.
|
||||
* @note Implementation is optional.
|
||||
*/
|
||||
#define osalDbgCheckClassS()
|
||||
/** @} */
|
||||
|
||||
/**
|
||||
* @name IRQ service routines wrappers
|
||||
* @{
|
||||
*/
|
||||
/**
|
||||
* @brief IRQ prologue code.
|
||||
* @details This macro must be inserted at the start of all IRQ handlers.
|
||||
|
@ -200,6 +259,96 @@ typedef struct {
|
|||
* @param[in] id a vector name as defined in @p vectors.s
|
||||
*/
|
||||
#define OSAL_IRQ_HANDLER(id) void id(void)
|
||||
/** @} */
|
||||
|
||||
/**
|
||||
* @name Time conversion utilities
|
||||
* @{
|
||||
*/
|
||||
/**
|
||||
* @brief Seconds to system ticks.
|
||||
* @details Converts from seconds to system ticks number.
|
||||
* @note The result is rounded upward to the next tick boundary.
|
||||
*
|
||||
* @param[in] sec number of seconds
|
||||
* @return The number of ticks.
|
||||
*
|
||||
* @api
|
||||
*/
|
||||
#define OSAL_S2ST(sec) \
|
||||
((systime_t)((sec) * OSAL_ST_FREQUENCY))
|
||||
|
||||
/**
|
||||
* @brief Milliseconds to system ticks.
|
||||
* @details Converts from milliseconds to system ticks number.
|
||||
* @note The result is rounded upward to the next tick boundary.
|
||||
*
|
||||
* @param[in] msec number of milliseconds
|
||||
* @return The number of ticks.
|
||||
*
|
||||
* @api
|
||||
*/
|
||||
#define OSAL_MS2ST(msec) \
|
||||
((systime_t)(((((uint32_t)(msec)) * ((uint32_t)OSAL_ST_FREQUENCY) - 1UL) /\
|
||||
1000UL) + 1UL))
|
||||
|
||||
/**
|
||||
* @brief Microseconds to system ticks.
|
||||
* @details Converts from microseconds to system ticks number.
|
||||
* @note The result is rounded upward to the next tick boundary.
|
||||
*
|
||||
* @param[in] usec number of microseconds
|
||||
* @return The number of ticks.
|
||||
*
|
||||
* @api
|
||||
*/
|
||||
#define OSAL_US2ST(usec) \
|
||||
((systime_t)(((((uint32_t)(usec)) * ((uint32_t)OSAL_ST_FREQUENCY) - 1UL) /\
|
||||
1000000UL) + 1UL))
|
||||
/** @} */
|
||||
|
||||
/**
|
||||
* @name Sleep macros using absolute time
|
||||
* @{
|
||||
*/
|
||||
/**
|
||||
* @brief Delays the invoking thread for the specified number of seconds.
|
||||
* @note The specified time is rounded up to a value allowed by the real
|
||||
* system tick clock.
|
||||
* @note The maximum specifiable value is implementation dependent.
|
||||
*
|
||||
* @param[in] sec time in seconds, must be different from zero
|
||||
*
|
||||
* @api
|
||||
*/
|
||||
#define osalThreadSleepSeconds(sec) osalThreadSleep(OSAL_S2ST(sec))
|
||||
|
||||
/**
|
||||
* @brief Delays the invoking thread for the specified number of
|
||||
* milliseconds.
|
||||
* @note The specified time is rounded up to a value allowed by the real
|
||||
* system tick clock.
|
||||
* @note The maximum specifiable value is implementation dependent.
|
||||
*
|
||||
* @param[in] msec time in milliseconds, must be different from zero
|
||||
*
|
||||
* @api
|
||||
*/
|
||||
#define osalThreadSleepMilliseconds(msec) osalThreadSleep(OSAL_MS2ST(msec))
|
||||
|
||||
/**
|
||||
* @brief Delays the invoking thread for the specified number of
|
||||
* microseconds.
|
||||
* @note The specified time is rounded up to a value allowed by the real
|
||||
* system tick clock.
|
||||
* @note The maximum specifiable value is implementation dependent.
|
||||
*
|
||||
* @param[in] usec time in microseconds, must be different from zero
|
||||
*
|
||||
* @api
|
||||
*/
|
||||
#define osalThreadSleepMicroseconds(usec) osalThreadSleep(OSAL_US2ST(usec))
|
||||
/** @} */
|
||||
|
||||
/*===========================================================================*/
|
||||
/* External declarations. */
|
||||
|
@ -210,7 +359,8 @@ extern "C" {
|
|||
#endif
|
||||
void osalInit(void);
|
||||
void osalSysHalt(const char *reason);
|
||||
msg_t osalQueueGoSleepTimeoutS(threads_queue_t *tqp, systime_t time);
|
||||
void osalThreadDequeueNextI(threads_queue_t *tqp, msg_t msg);
|
||||
void osalThreadDequeueAllI(threads_queue_t *tqp, msg_t msg);
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
@ -219,6 +369,33 @@ extern "C" {
|
|||
/* Module inline functions. */
|
||||
/*===========================================================================*/
|
||||
|
||||
/**
|
||||
* @brief Globally enables interrupts.
|
||||
*
|
||||
* @special
|
||||
*/
|
||||
static inline void osalSysEnable(void) {
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Globally disables interrupts.
|
||||
*
|
||||
* @special
|
||||
*/
|
||||
static inline void osalSysDisable(void) {
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Waits for an interrupt to occur.
|
||||
*
|
||||
* @special
|
||||
*/
|
||||
static inline void osalSysWait(void) {
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Enters a critical zone from thread context.
|
||||
* @note This function cannot be used for reentrant critical zones.
|
||||
|
@ -260,31 +437,62 @@ static inline void osalSysUnlockFromISR(void) {
|
|||
}
|
||||
|
||||
/**
|
||||
* @brief Enters a critical zone returning the previous machine status.
|
||||
* @brief Returns the execution status and enters a critical zone.
|
||||
* @details This functions enters into a critical zone and can be called
|
||||
* from any context. Because its flexibility it is less efficient
|
||||
* than @p chSysLock() which is preferable when the calling context
|
||||
* is known.
|
||||
* @post The system is in a critical zone.
|
||||
*
|
||||
* @return The previous status.
|
||||
* @return The previous system status, the encoding of this
|
||||
* status word is architecture-dependent and opaque.
|
||||
*
|
||||
* @special
|
||||
* @xclass
|
||||
*/
|
||||
static inline osal_sts_t osalSysGetStatusAndLock(void) {
|
||||
static inline syssts_t osalSysGetStatusAndLockX(void) {
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Restores a machine status.
|
||||
* @brief Restores the specified execution status and leaves a critical zone.
|
||||
* @note A call to @p chSchRescheduleS() is automatically performed
|
||||
* if exiting the critical zone and if not in ISR context.
|
||||
*
|
||||
* @param[in] sts the previous status. This value must be something
|
||||
* returned by the function @p osalSysGetStatusAndLock().
|
||||
* Arbitrary values are not allowed.
|
||||
* @param[in] sts the system status to be restored.
|
||||
*
|
||||
* @special
|
||||
* @xclass
|
||||
*/
|
||||
static inline void osalSysSetStatus(osal_sts_t sts) {
|
||||
static inline void osalSysRestoreStatusX(syssts_t sts) {
|
||||
|
||||
(void)sts;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Polled delay.
|
||||
* @note The real delay is always few cycles in excess of the specified
|
||||
* value.
|
||||
*
|
||||
* @param[in] cycles number of cycles
|
||||
*
|
||||
* @xclass
|
||||
*/
|
||||
static inline void osalSysPolledDelayX(rtcnt_t cycles) {
|
||||
|
||||
(void)cycles;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Systick callback for the underlying OS.
|
||||
* @note This callback is only defined if the OSAL requires such a
|
||||
* service from the HAL.
|
||||
*/
|
||||
#if (OSAL_ST_MODE != OSAL_ST_MODE_NONE) || defined(__DOXYGEN__)
|
||||
static inline void osalOsTimerHandlerI(void) {
|
||||
|
||||
}
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief Checks if a reschedule is required and performs it.
|
||||
* @note I-Class functions invoked from thread context must not reschedule
|
||||
|
@ -298,6 +506,45 @@ static inline void osalOsRescheduleS(void) {
|
|||
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Current system time.
|
||||
* @details Returns the number of system ticks since the @p osalInit()
|
||||
* invocation.
|
||||
* @note The counter can reach its maximum and then restart from zero.
|
||||
* @note This function can be called from any context but its atomicity
|
||||
* is not guaranteed on architectures whose word size is less than
|
||||
* @systime_t size.
|
||||
*
|
||||
* @return The system time in ticks.
|
||||
*
|
||||
* @xclass
|
||||
*/
|
||||
static inline systime_t osalOsGetSystemTimeX(void) {
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Checks if the specified time is within the specified time window.
|
||||
* @note When start==end then the function returns always true because the
|
||||
* whole time range is specified.
|
||||
* @note This function can be called from any context.
|
||||
*
|
||||
* @param[in] time the time to be verified
|
||||
* @param[in] start the start of the time window (inclusive)
|
||||
* @param[in] end the end of the time window (non inclusive)
|
||||
* @retval true current time within the specified time window.
|
||||
* @retval false current time not within the specified time window.
|
||||
*
|
||||
* @xclass
|
||||
*/
|
||||
static inline bool osalOsIsTimeWithinX(systime_t time,
|
||||
systime_t start,
|
||||
systime_t end) {
|
||||
|
||||
return (bool)(time - start < end - start);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Suspends the invoking thread for the specified time.
|
||||
*
|
||||
|
@ -310,7 +557,7 @@ static inline void osalOsRescheduleS(void) {
|
|||
*
|
||||
* @sclass
|
||||
*/
|
||||
inline void osalThreadSleepS(systime_t time) {
|
||||
static inline void osalThreadSleepS(systime_t time) {
|
||||
|
||||
(void)time;
|
||||
}
|
||||
|
@ -327,11 +574,132 @@ inline void osalThreadSleepS(systime_t time) {
|
|||
*
|
||||
* @api
|
||||
*/
|
||||
void osalThreadSleep(systime_t time) {
|
||||
static inline void osalThreadSleep(systime_t time) {
|
||||
|
||||
(void)time;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Sends the current thread sleeping and sets a reference variable.
|
||||
* @note This function must reschedule, it can only be called from thread
|
||||
* context.
|
||||
*
|
||||
* @param[in] trp a pointer to a thread reference object
|
||||
* @return The wake up message.
|
||||
*
|
||||
* @sclass
|
||||
*/
|
||||
static inline msg_t osalThreadSuspendS(thread_reference_t *trp) {
|
||||
|
||||
(void)trp;
|
||||
|
||||
return MSG_OK;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Sends the current thread sleeping and sets a reference variable.
|
||||
* @note This function must reschedule, it can only be called from thread
|
||||
* context.
|
||||
*
|
||||
* @param[in] trp a pointer to a thread reference object
|
||||
* @param[in] timeout the timeout in system ticks, the special values are
|
||||
* handled as follow:
|
||||
* - @a TIME_INFINITE the thread enters an infinite sleep
|
||||
* state.
|
||||
* - @a TIME_IMMEDIATE the thread is not enqueued and
|
||||
* the function returns @p MSG_TIMEOUT as if a timeout
|
||||
* occurred.
|
||||
* .
|
||||
* @return The wake up message.
|
||||
* @retval MSG_TIMEOUT if the operation timed out.
|
||||
*
|
||||
* @sclass
|
||||
*/
|
||||
static inline msg_t osalThreadSuspendTimeoutS(thread_reference_t *trp,
|
||||
systime_t timeout) {
|
||||
|
||||
(void)trp;
|
||||
(void)timeout;
|
||||
|
||||
return MSG_OK;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Wakes up a thread waiting on a thread reference object.
|
||||
* @note This function must not reschedule because it can be called from
|
||||
* ISR context.
|
||||
*
|
||||
* @param[in] trp a pointer to a thread reference object
|
||||
* @param[in] msg the message code
|
||||
*
|
||||
* @iclass
|
||||
*/
|
||||
static inline void osalThreadResumeI(thread_reference_t *trp, msg_t msg) {
|
||||
|
||||
(void)trp;
|
||||
(void)msg;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Wakes up a thread waiting on a thread reference object.
|
||||
* @note This function must reschedule, it can only be called from thread
|
||||
* context.
|
||||
*
|
||||
* @param[in] trp a pointer to a thread reference object
|
||||
* @param[in] msg the message code
|
||||
*
|
||||
* @iclass
|
||||
*/
|
||||
static inline void osalThreadResumeS(thread_reference_t *trp, msg_t msg) {
|
||||
|
||||
(void)trp;
|
||||
(void)msg;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Initializes a threads queue object.
|
||||
*
|
||||
* @param[out] tqp pointer to the threads queue object
|
||||
*
|
||||
* @init
|
||||
*/
|
||||
static inline void osalThreadQueueObjectInit(threads_queue_t *tqp) {
|
||||
|
||||
(void)tqp;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Enqueues the caller thread.
|
||||
* @details The caller thread is enqueued and put to sleep until it is
|
||||
* dequeued or the specified timeouts expires.
|
||||
*
|
||||
* @param[in] tqp pointer to the threads queue object
|
||||
* @param[in] time the timeout in system ticks, the special values are
|
||||
* handled as follow:
|
||||
* - @a TIME_INFINITE the thread enters an infinite sleep
|
||||
* state.
|
||||
* - @a TIME_IMMEDIATE the thread is not enqueued and
|
||||
* the function returns @p MSG_TIMEOUT as if a timeout
|
||||
* occurred.
|
||||
* .
|
||||
* @return The message from @p osalQueueWakeupOneI() or
|
||||
* @p osalQueueWakeupAllI() functions.
|
||||
* @retval RDY_TIMEOUT if the thread has not been dequeued within the
|
||||
* specified timeout or if the function has been
|
||||
* invoked with @p TIME_IMMEDIATE as timeout
|
||||
* specification.
|
||||
*
|
||||
* @sclass
|
||||
*/
|
||||
static inline msg_t osalThreadEnqueueTimeoutS(threads_queue_t *tqp,
|
||||
systime_t time) {
|
||||
|
||||
(void)tqp;
|
||||
(void)time;
|
||||
|
||||
return MSG_OK;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Initializes an event flags object.
|
||||
*
|
||||
|
@ -339,11 +707,13 @@ void osalThreadSleep(systime_t time) {
|
|||
*
|
||||
* @init
|
||||
*/
|
||||
static inline void osalEventInit(event_source_t *esp) {
|
||||
static inline void osalEventObjectInit(event_source_t *esp) {
|
||||
|
||||
osalDbgCheck(esp != NULL);
|
||||
|
||||
esp->flags = 0;
|
||||
esp->cb = NULL;
|
||||
esp->param = NULL;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -360,6 +730,8 @@ static inline void osalEventBroadcastFlagsI(event_source_t *esp,
|
|||
osalDbgCheck(esp != NULL);
|
||||
|
||||
esp->flags |= flags;
|
||||
if (esp->cb != NULL)
|
||||
esp->cb(esp);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -376,47 +748,33 @@ static inline void osalEventBroadcastFlags(event_source_t *esp,
|
|||
osalDbgCheck(esp != NULL);
|
||||
|
||||
osalSysLock();
|
||||
esp->flags |= flags;
|
||||
osalEventBroadcastFlagsI(esp, flags);
|
||||
osalSysUnlock();
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Returns the flags associated to the event object then clears them.
|
||||
* @brief Event callback setup.
|
||||
* @note The callback is invoked from ISR context and can
|
||||
* only invoke I-Class functions. The callback is meant
|
||||
* to wakeup the task that will handle the event by
|
||||
* calling @p osalEventGetAndClearFlagsI().
|
||||
* @note This function is not part of the OSAL API and is provided
|
||||
* exclusively as an example and for convenience.
|
||||
*
|
||||
* @param[in] esp pointer to the event flags object
|
||||
* @return The flags.
|
||||
*
|
||||
* @iclass
|
||||
*/
|
||||
static inline eventflags_t osalEventGetAndClearFlagsI(event_source_t *esp) {
|
||||
eventflags_t flags;
|
||||
|
||||
osalDbgCheck(esp != NULL);
|
||||
|
||||
flags = esp->flags;
|
||||
esp->flags = 0;
|
||||
return flags;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Returns the flags associated to the event object and clears them.
|
||||
* @note This function is not part of the OSAL API and is provided
|
||||
* exclusively as an example and for convenience.
|
||||
*
|
||||
* @param[in] esp pointer to the event flags object
|
||||
* @return The flags.
|
||||
* @param[in] cb pointer to the callback function
|
||||
* @param[in] param parameter to be passed to the callback function
|
||||
*
|
||||
* @api
|
||||
*/
|
||||
static inline eventflags_t osalEventGetAndClearFlags(event_source_t *esp) {
|
||||
eventflags_t flags;
|
||||
static inline void osalEventSetCallback(event_source_t *esp,
|
||||
eventcallback_t cb,
|
||||
void *param) {
|
||||
|
||||
osalSysLock();
|
||||
flags = osalEventGetAndClearFlagsI(esp);
|
||||
osalSysUnlock();
|
||||
return flags;
|
||||
osalDbgCheck(esp != NULL);
|
||||
|
||||
esp->cb = cb;
|
||||
esp->param = param;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -426,7 +784,7 @@ static inline eventflags_t osalEventGetAndClearFlags(event_source_t *esp) {
|
|||
*
|
||||
* @init
|
||||
*/
|
||||
static inline void osalMutexInit(mutex_t *mp) {
|
||||
static inline void osalMutexObjectInit(mutex_t *mp) {
|
||||
|
||||
*mp = 0;
|
||||
}
|
||||
|
@ -463,46 +821,6 @@ static inline void osalMutexUnlock(mutex_t *mp) {
|
|||
*mp = 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Initializes a threads queue object.
|
||||
*
|
||||
* @param[out] tqp pointer to the threads queue object
|
||||
*
|
||||
* @init
|
||||
*/
|
||||
static inline void osalQueueInit(threads_queue_t *tqp) {
|
||||
|
||||
(void)tqp;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Dequeues and wakes up one thread from the queue, if any.
|
||||
*
|
||||
* @param[in] tqp pointer to the threads queue object
|
||||
* @param[in] msg the message code
|
||||
*
|
||||
* @iclass
|
||||
*/
|
||||
static inline void osalQueueWakeupOneI(threads_queue_t *tqp, msg_t msg) {
|
||||
|
||||
(void)tqp;
|
||||
(void)msg;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Dequeues and wakes up all threads from the queue.
|
||||
*
|
||||
* @param[in] tqp pointer to the threads queue object
|
||||
* @param[in] msg the message code
|
||||
*
|
||||
* @iclass
|
||||
*/
|
||||
static inline void osalQueueWakeupAllI(threads_queue_t *tqp, msg_t msg) {
|
||||
|
||||
(void)tqp;
|
||||
(void)msg;
|
||||
}
|
||||
|
||||
#endif /* _OSAL_H_ */
|
||||
|
||||
/** @} */
|
||||
|
|
|
@ -15,14 +15,13 @@
|
|||
*/
|
||||
|
||||
/**
|
||||
* @file templates/pal_lld.c
|
||||
* @brief PAL subsystem low level driver template.
|
||||
* @file pal_lld.c
|
||||
* @brief PLATFORM PAL subsystem low level driver source.
|
||||
*
|
||||
* @addtogroup PAL
|
||||
* @{
|
||||
*/
|
||||
|
||||
#include "ch.h"
|
||||
#include "hal.h"
|
||||
|
||||
#if HAL_USE_PAL || defined(__DOXYGEN__)
|
||||
|
|
|
@ -15,8 +15,8 @@
|
|||
*/
|
||||
|
||||
/**
|
||||
* @file templates/pal_lld.h
|
||||
* @brief PAL subsystem low level driver header template.
|
||||
* @file pal_lld.h
|
||||
* @brief PLATFORM PAL subsystem low level driver header.
|
||||
*
|
||||
* @addtogroup PAL
|
||||
* @{
|
||||
|
|
|
@ -15,8 +15,8 @@
|
|||
*/
|
||||
|
||||
/**
|
||||
* @file PLATFORM/pwm_lld.c
|
||||
* @brief PLATFORM PWM subsystem low level driver header.
|
||||
* @file pwm_lld.c
|
||||
* @brief PLATFORM PWM subsystem low level driver source.
|
||||
*
|
||||
* @addtogroup PWM
|
||||
* @{
|
||||
|
@ -108,6 +108,7 @@ void pwm_lld_stop(PWMDriver *pwmp) {
|
|||
|
||||
}
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -128,6 +129,8 @@ void pwm_lld_enable_channel(PWMDriver *pwmp,
|
|||
pwmcnt_t width) {
|
||||
|
||||
(void)pwmp;
|
||||
(void)channel;
|
||||
(void)width;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -145,6 +148,7 @@ void pwm_lld_enable_channel(PWMDriver *pwmp,
|
|||
void pwm_lld_disable_channel(PWMDriver *pwmp, pwmchannel_t channel) {
|
||||
|
||||
(void)pwmp;
|
||||
(void)channel;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
*/
|
||||
|
||||
/**
|
||||
* @file PLATFORM/pwm_lld.h
|
||||
* @file pwm_lld.h
|
||||
* @brief PLATFORM PWM subsystem low level driver header.
|
||||
*
|
||||
* @addtogroup PWM
|
||||
|
|
|
@ -19,8 +19,8 @@
|
|||
*/
|
||||
|
||||
/**
|
||||
* @file PLATFORM/RTCv2/rtc_lld.c
|
||||
* @brief PLATFORML1xx/PLATFORMF2xx/PLATFORMF4xx RTC low level driver.
|
||||
* @file rtc_lld.c
|
||||
* @brief PLATFORM RTC subsystem low level driver source.
|
||||
*
|
||||
* @addtogroup RTC
|
||||
* @{
|
||||
|
|
|
@ -19,8 +19,8 @@
|
|||
*/
|
||||
|
||||
/**
|
||||
* @file PLATFORM/rtc_lld.h
|
||||
* @brief PLATFORML RTC low level driver header.
|
||||
* @file rtc_lld.h
|
||||
* @brief PLATFORM RTC subsystem low level driver header.
|
||||
*
|
||||
* @addtogroup RTC
|
||||
* @{
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
*/
|
||||
|
||||
/**
|
||||
* @file PLATFORM/sdc_lld.c
|
||||
* @file sdc_lld.c
|
||||
* @brief PLATFORM SDC subsystem low level driver source.
|
||||
*
|
||||
* @addtogroup SDC
|
||||
|
@ -191,6 +191,9 @@ bool sdc_lld_send_cmd_short(SDCDriver *sdcp, uint8_t cmd, uint32_t arg,
|
|||
uint32_t *resp) {
|
||||
|
||||
(void)sdcp;
|
||||
(void)cmd;
|
||||
(void)arg;
|
||||
(void)resp;
|
||||
|
||||
return HAL_SUCCESS;
|
||||
}
|
||||
|
@ -213,6 +216,9 @@ bool sdc_lld_send_cmd_short_crc(SDCDriver *sdcp, uint8_t cmd, uint32_t arg,
|
|||
uint32_t *resp) {
|
||||
|
||||
(void)sdcp;
|
||||
(void)cmd;
|
||||
(void)arg;
|
||||
(void)resp;
|
||||
|
||||
return HAL_SUCCESS;
|
||||
}
|
||||
|
@ -235,6 +241,9 @@ bool sdc_lld_send_cmd_long_crc(SDCDriver *sdcp, uint8_t cmd, uint32_t arg,
|
|||
uint32_t *resp) {
|
||||
|
||||
(void)sdcp;
|
||||
(void)cmd;
|
||||
(void)arg;
|
||||
(void)resp;
|
||||
|
||||
return HAL_SUCCESS;
|
||||
}
|
||||
|
@ -306,6 +315,12 @@ bool sdc_lld_write_aligned(SDCDriver *sdcp, uint32_t startblk,
|
|||
bool sdc_lld_read(SDCDriver *sdcp, uint32_t startblk,
|
||||
uint8_t *buf, uint32_t n) {
|
||||
|
||||
(void)sdcp;
|
||||
(void)startblk;
|
||||
(void)buf;
|
||||
(void)n;
|
||||
|
||||
return HAL_SUCCESS;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -325,6 +340,12 @@ bool sdc_lld_read(SDCDriver *sdcp, uint32_t startblk,
|
|||
bool sdc_lld_write(SDCDriver *sdcp, uint32_t startblk,
|
||||
const uint8_t *buf, uint32_t n) {
|
||||
|
||||
(void)sdcp;
|
||||
(void)startblk;
|
||||
(void)buf;
|
||||
(void)n;
|
||||
|
||||
return HAL_SUCCESS;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -341,6 +362,7 @@ bool sdc_lld_write(SDCDriver *sdcp, uint32_t startblk,
|
|||
bool sdc_lld_sync(SDCDriver *sdcp) {
|
||||
|
||||
(void)sdcp;
|
||||
|
||||
return HAL_SUCCESS;
|
||||
}
|
||||
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
*/
|
||||
|
||||
/**
|
||||
* @file PLATFORM/sdc_lld.h
|
||||
* @file sdc_lld.h
|
||||
* @brief PLATFORM SDC subsystem low level driver header.
|
||||
*
|
||||
* @addtogroup SDC
|
||||
|
|
|
@ -15,8 +15,8 @@
|
|||
*/
|
||||
|
||||
/**
|
||||
* @file PLATFORM/USARTv2/serial_lld.c
|
||||
* @brief PLATFORM low level serial driver code.
|
||||
* @file serial_lld.c
|
||||
* @brief PLATFORM serial subsystem low level driver source.
|
||||
*
|
||||
* @addtogroup SERIAL
|
||||
* @{
|
||||
|
@ -112,7 +112,6 @@ void sd_lld_start(SerialDriver *sdp, const SerialConfig *config) {
|
|||
void sd_lld_stop(SerialDriver *sdp) {
|
||||
|
||||
if (sdp->state == SD_READY) {
|
||||
usart_deinit(sdp->usart);
|
||||
#if PLATFORM_SERIAL_USE_USART1
|
||||
if (&SD1 == sdp) {
|
||||
|
||||
|
|
|
@ -15,8 +15,8 @@
|
|||
*/
|
||||
|
||||
/**
|
||||
* @file PLATFORM/serial_lld.h
|
||||
* @brief PLATFORM low level serial driver header.
|
||||
* @file serial_lld.h
|
||||
* @brief PLATFORM serial subsystem low level driver header.
|
||||
*
|
||||
* @addtogroup SERIAL
|
||||
* @{
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
*/
|
||||
|
||||
/**
|
||||
* @file PLATFORM/SPIv2/spi_lld.c
|
||||
* @file spi_lld.c
|
||||
* @brief PLATFORM SPI subsystem low level driver source.
|
||||
*
|
||||
* @addtogroup SPI
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
*/
|
||||
|
||||
/**
|
||||
* @file PLATFORM/spi_lld.h
|
||||
* @file spi_lld.h
|
||||
* @brief PLATFORM SPI subsystem low level driver header.
|
||||
*
|
||||
* @addtogroup SPI
|
||||
|
|
|
@ -15,8 +15,8 @@
|
|||
*/
|
||||
|
||||
/**
|
||||
* @file PLATFORM/st_lld.c
|
||||
* @brief ST Driver subsystem low level driver code.
|
||||
* @file st_lld.c
|
||||
* @brief PLATFORM ST subsystem low level driver source.
|
||||
*
|
||||
* @addtogroup ST
|
||||
* @{
|
||||
|
|
|
@ -15,8 +15,8 @@
|
|||
*/
|
||||
|
||||
/**
|
||||
* @file PLATFORM/st_lld.h
|
||||
* @brief ST Driver subsystem low level driver header.
|
||||
* @file st_lld.h
|
||||
* @brief PLATFORM ST subsystem low level driver header.
|
||||
* @details This header is designed to be include-able without having to
|
||||
* include other files from the HAL.
|
||||
*
|
||||
|
|
|
@ -15,14 +15,13 @@
|
|||
*/
|
||||
|
||||
/**
|
||||
* @file templates/uart_lld.c
|
||||
* @brief UART Driver subsystem low level driver source template.
|
||||
* @file uart_lld.c
|
||||
* @brief PLATFORM UART subsystem low level driver source.
|
||||
*
|
||||
* @addtogroup UART
|
||||
* @{
|
||||
*/
|
||||
|
||||
#include "ch.h"
|
||||
#include "hal.h"
|
||||
|
||||
#if HAL_USE_UART || defined(__DOXYGEN__)
|
||||
|
|
|
@ -15,8 +15,8 @@
|
|||
*/
|
||||
|
||||
/**
|
||||
* @file templates/uart_lld.h
|
||||
* @brief UART Driver subsystem low level driver header template.
|
||||
* @file uart_lld.h
|
||||
* @brief PLATFORM UART subsystem low level driver header.
|
||||
*
|
||||
* @addtogroup UART
|
||||
* @{
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
*/
|
||||
|
||||
/**
|
||||
* @file PLATFORM/usb_lld.c
|
||||
* @file usb_lld.c
|
||||
* @brief PLATFORM USB subsystem low level driver source.
|
||||
*
|
||||
* @addtogroup USB
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
*/
|
||||
|
||||
/**
|
||||
* @file PLATFORM/usb_lld.h
|
||||
* @file usb_lld.h
|
||||
* @brief PLATFORM USB subsystem low level driver header.
|
||||
*
|
||||
* @addtogroup USB
|
||||
|
|
|
@ -14,7 +14,6 @@
|
|||
limitations under the License.
|
||||
*/
|
||||
|
||||
#include "ch.h"
|
||||
#include "hal.h"
|
||||
|
||||
/*
|
||||
|
|
Loading…
Reference in New Issue