diff options
author | gdisirio <gdisirio@110e8d01-0319-4d1e-a829-52ad28d1bb01> | 2018-09-28 08:20:40 +0000 |
---|---|---|
committer | gdisirio <gdisirio@110e8d01-0319-4d1e-a829-52ad28d1bb01> | 2018-09-28 08:20:40 +0000 |
commit | 4b23f3b361221f5c57cef31bbf80c70372ab4d35 (patch) | |
tree | 75856fdd0cfb67f266bbe4398afb12da580967a5 /os/hal/templates | |
parent | ccae24379ddc423b8e10cdd0fac527360fedd633 (diff) | |
download | ChibiOS-4b23f3b361221f5c57cef31bbf80c70372ab4d35.tar.gz ChibiOS-4b23f3b361221f5c57cef31bbf80c70372ab4d35.tar.bz2 ChibiOS-4b23f3b361221f5c57cef31bbf80c70372ab4d35.zip |
New SIO HAL driver model.
git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@12300 110e8d01-0319-4d1e-a829-52ad28d1bb01
Diffstat (limited to 'os/hal/templates')
-rw-r--r-- | os/hal/templates/hal_sio_lld.c | 187 | ||||
-rw-r--r-- | os/hal/templates/hal_sio_lld.h | 10 | ||||
-rw-r--r-- | os/hal/templates/halconf.h | 7 | ||||
-rw-r--r-- | os/hal/templates/platform.mk | 4 |
4 files changed, 206 insertions, 2 deletions
diff --git a/os/hal/templates/hal_sio_lld.c b/os/hal/templates/hal_sio_lld.c new file mode 100644 index 000000000..ea425709c --- /dev/null +++ b/os/hal/templates/hal_sio_lld.c @@ -0,0 +1,187 @@ +/*
+ ChibiOS - Copyright (C) 2006..2018 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.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+/**
+ * @file hal_sio_lld.c
+ * @brief PLATFORM SIO subsystem low level driver source.
+ *
+ * @addtogroup SIO
+ * @{
+ */
+
+#include "hal.h"
+
+#if (HAL_USE_SIO == TRUE) || defined(__DOXYGEN__)
+
+/*===========================================================================*/
+/* Driver local definitions. */
+/*===========================================================================*/
+
+/*===========================================================================*/
+/* Driver exported variables. */
+/*===========================================================================*/
+
+/**
+ * @brief SIO1 driver identifier.
+ */
+#if (PLATFORM_SIO_USE_SIO1 == TRUE) || defined(__DOXYGEN__)
+SIODriver SIOD1;
+#endif
+
+/*===========================================================================*/
+/* Driver local variables and types. */
+/*===========================================================================*/
+
+/*===========================================================================*/
+/* Driver local functions. */
+/*===========================================================================*/
+
+/*===========================================================================*/
+/* Driver interrupt handlers. */
+/*===========================================================================*/
+
+/*===========================================================================*/
+/* Driver exported functions. */
+/*===========================================================================*/
+
+/**
+ * @brief Low level SIO driver initialization.
+ *
+ * @notapi
+ */
+void sio_lld_init(void) {
+
+#if PLATFORM_SIO_USE_SIO1 == TRUE
+ /* Driver initialization.*/
+ sioObjectInit(&SIOD1);
+#endif
+}
+
+/**
+ * @brief Configures and activates the SIO peripheral.
+ *
+ * @param[in] siop pointer to the @p SIODriver object
+ *
+ * @notapi
+ */
+void sio_lld_start(SIODriver *siop) {
+
+ if (siop->state == SIO_STOP) {
+ /* Enables the peripheral.*/
+#if PLATFORM_SIO_USE_SIO1 == TRUE
+ if (&SIOD1 == siop) {
+
+ }
+#endif
+ }
+ /* Configures the peripheral.*/
+
+}
+
+/**
+ * @brief Deactivates the SIO peripheral.
+ *
+ * @param[in] siop pointer to the @p SIODriver object
+ *
+ * @notapi
+ */
+void sio_lld_stop(SIODriver *siop) {
+
+ if (siop->state == SIO_READY) {
+ /* Resets the peripheral.*/
+
+ /* Disables the peripheral.*/
+#if PLATFORM_SIO_USE_SIO1 == TRUE
+ if (&SIOD1 == siop) {
+
+ }
+#endif
+ }
+}
+
+
+/**
+ * @brief Reads data from the RX FIFO.
+ * @details This function is non-blocking, data is read if present and the
+ * effective amount is returned.
+ * @note This function can be called from any context but it is meant to
+ * be called from the @p rxne_cb callback handler.
+ *
+ * @param[in] siop pointer to the @p SIODriver object
+ * @param[in] buffer buffer for the received data
+ * @param[in] size maximum number of bytes to read
+ * @return The number of received bytes.
+ *
+ * @notapi
+ */
+size_t sio_lld_read(SIODriver *siop, uint8_t *buffer, size_t size) {
+
+ (void)siop;
+ (void)buffer;
+ (void)size;
+
+ return (size_t)0;
+}
+
+/**
+ * @brief Writes data into the TX FIFO.
+ * @details This function is non-blocking, data is written if there is space
+ * in the FIFO and the effective amount is returned.
+ * @note This function can be called from any context but it is meant to
+ * be called from the @p rxne_cb callback handler.
+ *
+ * @param[in] siop pointer to the @p SIODriver object
+ * @param[out] buffer buffer containing the data to be transmitted
+ * @param[in] size maximum number of bytes to read
+ * @return The number of transmitted bytes.
+ *
+ * @notapi
+ */
+size_t sio_lld_write(SIODriver *siop, const uint8_t *buffer, size_t size) {
+
+ (void)siop;
+ (void)buffer;
+ (void)size;
+
+ return (size_t)0;
+}
+
+/**
+ * @brief Control operation on a serial port.
+ *
+ * @param[in] siop pointer to the @p SIODriver object
+ * @param[in] operation control operation code
+ * @param[in,out] arg operation argument
+ *
+ * @return The control operation status.
+ * @retval MSG_OK in case of success.
+ * @retval MSG_TIMEOUT in case of operation timeout.
+ * @retval MSG_RESET in case of operation reset.
+ *
+ * @notapi
+ */
+msg_t sio_lld_control(SIODriver *siop, unsigned int operation, void *arg) {
+
+ (void)siop;
+ (void)operation;
+ (void)arg;
+
+ return MSG_OK;
+}
+
+#endif /* HAL_USE_SIO == TRUE */
+
+/** @} */
diff --git a/os/hal/templates/hal_sio_lld.h b/os/hal/templates/hal_sio_lld.h index ad265dabd..45aa3f2e8 100644 --- a/os/hal/templates/hal_sio_lld.h +++ b/os/hal/templates/hal_sio_lld.h @@ -58,6 +58,11 @@ /*===========================================================================*/
/**
+ * @brief SIO driver condition flags type.
+ */
+typedef uint32_t sioflags_t;
+
+/**
* @brief Type of structure representing an SIO driver.
*/
typedef struct SIODriver SIODriver;
@@ -141,8 +146,9 @@ extern "C" { void sio_lld_init(void);
void sio_lld_start(SIODriver *siop);
void sio_lld_stop(SIODriver *siop);
- void sio_lld_read(SIODriver *siop, uint8_t *buffer, size_t size);
- void sio_lld_write(SIODriver *siop, const uint8_t *buffer, size_t size);
+ size_t sio_lld_read(SIODriver *siop, uint8_t *buffer, size_t size);
+ size_t sio_lld_write(SIODriver *siop, const uint8_t *buffer, size_t size);
+ msg_t sio_lld_control(SIODriver *siop, unsigned int operation, void *arg);
#ifdef __cplusplus
}
#endif
diff --git a/os/hal/templates/halconf.h b/os/hal/templates/halconf.h index 26d8463d4..d78e812a7 100644 --- a/os/hal/templates/halconf.h +++ b/os/hal/templates/halconf.h @@ -160,6 +160,13 @@ #endif
/**
+ * @brief Enables the SIO subsystem.
+ */
+#if !defined(HAL_USE_SIO) || defined(__DOXYGEN__)
+#define HAL_USE_SIO TRUE
+#endif
+
+/**
* @brief Enables the SPI subsystem.
*/
#if !defined(HAL_USE_SPI) || defined(__DOXYGEN__)
diff --git a/os/hal/templates/platform.mk b/os/hal/templates/platform.mk index 533c654c3..535e83b20 100644 --- a/os/hal/templates/platform.mk +++ b/os/hal/templates/platform.mk @@ -58,6 +58,9 @@ endif ifneq ($(findstring HAL_USE_SERIAL TRUE,$(HALCONF)),)
PLATFORMSRC += ${CHIBIOS}/os/hal/templates/hal_serial_lld.c
endif
+ifneq ($(findstring HAL_USE_SIO TRUE,$(HALCONF)),)
+PLATFORMSRC += ${CHIBIOS}/os/hal/templates/hal_sio_lld.c
+endif
ifneq ($(findstring HAL_USE_SPI TRUE,$(HALCONF)),)
PLATFORMSRC += ${CHIBIOS}/os/hal/templates/hal_spi_lld.c
endif
@@ -91,6 +94,7 @@ PLATFORMSRC = ${CHIBIOS}/os/hal/templates/hal_lld.c \ ${CHIBIOS}/os/hal/templates/hal_rtc_lld.c \
${CHIBIOS}/os/hal/templates/hal_sdc_lld.c \
${CHIBIOS}/os/hal/templates/hal_serial_lld.c \
+ ${CHIBIOS}/os/hal/templates/hal_sio_lld.c \
${CHIBIOS}/os/hal/templates/hal_spi_lld.c \
${CHIBIOS}/os/hal/templates/hal_st_lld.c \
${CHIBIOS}/os/hal/templates/hal_trng_lld.c \
|