1a705b1a2SMatthias Ringwald /* 2a705b1a2SMatthias Ringwald * Copyright (C) 2014 BlueKitchen GmbH 3a705b1a2SMatthias Ringwald * 4a705b1a2SMatthias Ringwald * Redistribution and use in source and binary forms, with or without 5a705b1a2SMatthias Ringwald * modification, are permitted provided that the following conditions 6a705b1a2SMatthias Ringwald * are met: 7a705b1a2SMatthias Ringwald * 8a705b1a2SMatthias Ringwald * 1. Redistributions of source code must retain the above copyright 9a705b1a2SMatthias Ringwald * notice, this list of conditions and the following disclaimer. 10a705b1a2SMatthias Ringwald * 2. Redistributions in binary form must reproduce the above copyright 11a705b1a2SMatthias Ringwald * notice, this list of conditions and the following disclaimer in the 12a705b1a2SMatthias Ringwald * documentation and/or other materials provided with the distribution. 13a705b1a2SMatthias Ringwald * 3. Neither the name of the copyright holders nor the names of 14a705b1a2SMatthias Ringwald * contributors may be used to endorse or promote products derived 15a705b1a2SMatthias Ringwald * from this software without specific prior written permission. 16a705b1a2SMatthias Ringwald * 4. Any redistribution, use, or modification is done solely for 17a705b1a2SMatthias Ringwald * personal benefit and not for any commercial purpose or for 18a705b1a2SMatthias Ringwald * monetary gain. 19a705b1a2SMatthias Ringwald * 20a705b1a2SMatthias Ringwald * THIS SOFTWARE IS PROVIDED BY BLUEKITCHEN GMBH AND CONTRIBUTORS 21a705b1a2SMatthias Ringwald * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 22a705b1a2SMatthias Ringwald * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 23a705b1a2SMatthias Ringwald * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL MATTHIAS 24a705b1a2SMatthias Ringwald * RINGWALD OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 25a705b1a2SMatthias Ringwald * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 26a705b1a2SMatthias Ringwald * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS 27a705b1a2SMatthias Ringwald * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 28a705b1a2SMatthias Ringwald * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 29a705b1a2SMatthias Ringwald * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF 30a705b1a2SMatthias Ringwald * THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 31a705b1a2SMatthias Ringwald * SUCH DAMAGE. 32a705b1a2SMatthias Ringwald * 33a705b1a2SMatthias Ringwald * Please inquire about commercial licensing options at 34a705b1a2SMatthias Ringwald * [email protected] 35a705b1a2SMatthias Ringwald * 36a705b1a2SMatthias Ringwald */ 37a705b1a2SMatthias Ringwald 38a705b1a2SMatthias Ringwald /* 39a705b1a2SMatthias Ringwald * hal_uart_dma.h 40a705b1a2SMatthias Ringwald * 41a705b1a2SMatthias Ringwald * Hardware abstraction layer that provides 42a705b1a2SMatthias Ringwald * - block wise IRQ-driven read/write 43*0489d9baSMatthias Ringwald * - baud control 44*0489d9baSMatthias Ringwald * - wake-up on CTS pulse (BTSTACK_UART_SLEEP_RTS_HIGH_WAKE_ON_CTS_PULSE) 45*0489d9baSMatthias Ringwald * 46*0489d9baSMatthias Ringwald * If HAVE_HAL_UART_DMA_SLEEP_MODES is defined, different sleeps modes can be provided and used 47a705b1a2SMatthias Ringwald * 48a705b1a2SMatthias Ringwald */ 49a705b1a2SMatthias Ringwald 50a705b1a2SMatthias Ringwald #ifndef __HAL_UART_DMA_H 51a705b1a2SMatthias Ringwald #define __HAL_UART_DMA_H 52a705b1a2SMatthias Ringwald 53a705b1a2SMatthias Ringwald #include <stdint.h> 54a705b1a2SMatthias Ringwald 55a705b1a2SMatthias Ringwald #if defined __cplusplus 56a705b1a2SMatthias Ringwald extern "C" { 57a705b1a2SMatthias Ringwald #endif 58a705b1a2SMatthias Ringwald 59*0489d9baSMatthias Ringwald /** 60*0489d9baSMatthias Ringwald * @brief Init and open device 61*0489d9baSMatthias Ringwald */ 62a705b1a2SMatthias Ringwald void hal_uart_dma_init(void); 63*0489d9baSMatthias Ringwald 64*0489d9baSMatthias Ringwald /** 65*0489d9baSMatthias Ringwald * @brief Set callback for block received - can be called from ISR context 66*0489d9baSMatthias Ringwald * @param callback 67*0489d9baSMatthias Ringwald */ 68*0489d9baSMatthias Ringwald void hal_uart_dma_set_block_received( void (*callback)(void)); 69*0489d9baSMatthias Ringwald 70*0489d9baSMatthias Ringwald /** 71*0489d9baSMatthias Ringwald * @brief Set callback for block sent - can be called from ISR context 72*0489d9baSMatthias Ringwald * @param callback 73*0489d9baSMatthias Ringwald */ 74*0489d9baSMatthias Ringwald void hal_uart_dma_set_block_sent( void (*callback)(void)); 75*0489d9baSMatthias Ringwald 76*0489d9baSMatthias Ringwald /** 77*0489d9baSMatthias Ringwald * @brief Set baud rate 78*0489d9baSMatthias Ringwald * @note During baud change, TX line should stay high and no data should be received on RX accidentally 79*0489d9baSMatthias Ringwald * @param block_received callback 80*0489d9baSMatthias Ringwald */ 81a705b1a2SMatthias Ringwald int hal_uart_dma_set_baud(uint32_t baud); 82*0489d9baSMatthias Ringwald 83*0489d9baSMatthias Ringwald /** 84*0489d9baSMatthias Ringwald * @brief Send block. When done, callback set by hal_uart_set_block_sent must be called 85*0489d9baSMatthias Ringwald * @param buffer 86*0489d9baSMatthias Ringwald * @param lengh 87*0489d9baSMatthias Ringwald */ 88a705b1a2SMatthias Ringwald void hal_uart_dma_send_block(const uint8_t *buffer, uint16_t length); 89*0489d9baSMatthias Ringwald 90*0489d9baSMatthias Ringwald /** 91*0489d9baSMatthias Ringwald * @brief Receive block. When done, callback set by hal_uart_dma_set_block_received must be called 92*0489d9baSMatthias Ringwald * @param buffer 93*0489d9baSMatthias Ringwald * @param lengh 94*0489d9baSMatthias Ringwald */ 95a705b1a2SMatthias Ringwald void hal_uart_dma_receive_block(uint8_t *buffer, uint16_t len); 96*0489d9baSMatthias Ringwald 97*0489d9baSMatthias Ringwald /** 98*0489d9baSMatthias Ringwald * @brief Set or clear callback for CSR pulse - can be called from ISR context 99*0489d9baSMatthias Ringwald * @param csr_irq_handler or NULL to disable IRQ handler 100*0489d9baSMatthias Ringwald */ 101*0489d9baSMatthias Ringwald void hal_uart_dma_set_csr_irq_handler( void (*csr_irq_handler)(void)); 102*0489d9baSMatthias Ringwald 103*0489d9baSMatthias Ringwald /** 104*0489d9baSMatthias Ringwald * @brief Set sleep mode 105*0489d9baSMatthias Ringwald * @param block_received callback 106*0489d9baSMatthias Ringwald */ 107a705b1a2SMatthias Ringwald void hal_uart_dma_set_sleep(uint8_t sleep); 108a705b1a2SMatthias Ringwald 109*0489d9baSMatthias Ringwald #ifdef HAVE_HAL_UART_DMA_SLEEP_MODES 110*0489d9baSMatthias Ringwald 111*0489d9baSMatthias Ringwald /** 112*0489d9baSMatthias Ringwald * @brief Set callback for block received - can be called from ISR context 113*0489d9baSMatthias Ringwald * @returns list of supported sleep modes 114*0489d9baSMatthias Ringwald */ 115*0489d9baSMatthias Ringwald int hal_uart_dma_get_supported_sleep_modes(void); 116*0489d9baSMatthias Ringwald 117*0489d9baSMatthias Ringwald /** 118*0489d9baSMatthias Ringwald * @brief Set sleep mode 119*0489d9baSMatthias Ringwald * @param sleep_mode 120*0489d9baSMatthias Ringwald */ 121*0489d9baSMatthias Ringwald void hal_uart_dma_set_sleep_mode(btstack_uart_sleep_mode_t sleep_mode); 122*0489d9baSMatthias Ringwald 123*0489d9baSMatthias Ringwald #endif 124*0489d9baSMatthias Ringwald 125a705b1a2SMatthias Ringwald #if defined __cplusplus 126a705b1a2SMatthias Ringwald } 127a705b1a2SMatthias Ringwald #endif 128a705b1a2SMatthias Ringwald #endif // __HAL_UART_DMA_H 129