/*
 * yUART_stm32.h
 *
 *  Created on: 2018年11月21日
 *      Author: 仰若水
 *  串口通信库
 *  任务安全的串口通信库。STM32接口
 */
 
 /* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __YUART_STM32_H
#define __YUART_STM32_H

#include "cmsis_os.h"
#include "stm32f0xx_hal.h"

#include "yUART.h"
#include "hal_uart_ext.h"

typedef struct __YUART_STM32 {
	YUART uart;
	UART_HandleTypeDef *huart;
	osSemaphoreId semaphore;
} YUART_STM32;

#define WAIT_FOREVER osWaitForever

// 等待信号量
inline static void semaphoreWait(YUART *uart, uint32_t millisec) {
	osSemaphoreWait(((YUART_STM32 *)uart)->semaphore, millisec);
}

// 请先调用该初始化函数
void YUART_STM32_DMA_Init(YUART_STM32 *uart);
void YUART_STM32_IT_Init(YUART_STM32 *uart);

// DMA模式
// 请在串口的RX完成、半完成回调以及Idle回调中调用本函数
void YUART_STM32_RX_DMA_Received(UART_HandleTypeDef *huart, YUART_STM32 *uart);

// 中断模式
// 请在串口的Idle回调中调用本函数
void YUART_STM32_RX_IT_Idle_Received(UART_HandleTypeDef *huart, YUART_STM32 *uart);
// 请在串口的完成回调中调用本函数
void YUART_STM32_RX_IT_Cplt_Received(UART_HandleTypeDef *huart, YUART_STM32 *uart);

#endif /* __YUART_STM32_H */