X-Git-Url: https://git.sur5r.net/?p=freertos;a=blobdiff_plain;f=FreeRTOS%2FDemo%2FCORTEX_MPU_M33F_NXP_LPC55S69_MCUXpresso%2FNXP_Code%2Fcomponent%2Fserial_manager%2Fserial_manager.h;fp=FreeRTOS%2FDemo%2FCORTEX_MPU_M33F_NXP_LPC55S69_MCUXpresso%2FNXP_Code%2Fcomponent%2Fserial_manager%2Fserial_manager.h;h=7cbb6c75a8feb1df184576b17cbf214347bfc553;hp=539864d8ea7fc3945ca03c2de6c424b6dfabb776;hb=584c29e09cf7a95184b0e32718e8f711b781ffea;hpb=c5efd011e8c638d413ac395419119a451a0cb169 diff --git a/FreeRTOS/Demo/CORTEX_MPU_M33F_NXP_LPC55S69_MCUXpresso/NXP_Code/component/serial_manager/serial_manager.h b/FreeRTOS/Demo/CORTEX_MPU_M33F_NXP_LPC55S69_MCUXpresso/NXP_Code/component/serial_manager/serial_manager.h index 539864d8e..7cbb6c75a 100644 --- a/FreeRTOS/Demo/CORTEX_MPU_M33F_NXP_LPC55S69_MCUXpresso/NXP_Code/component/serial_manager/serial_manager.h +++ b/FreeRTOS/Demo/CORTEX_MPU_M33F_NXP_LPC55S69_MCUXpresso/NXP_Code/component/serial_manager/serial_manager.h @@ -9,31 +9,44 @@ #ifndef __SERIAL_MANAGER_H__ #define __SERIAL_MANAGER_H__ +/*! + * @addtogroup serialmanager + * @{ + */ + /******************************************************************************* * Definitions ******************************************************************************/ #ifdef DEBUG_CONSOLE_TRANSFER_NON_BLOCKING -#define SERIAL_MANAGER_NON_BLOCKING_MODE \ - (1U) /* Enable or disable serial manager non-blocking mode (1 - enable, 0 - disable) */ +/*! @brief Enable or disable serial manager non-blocking mode (1 - enable, 0 - disable) */ +#define SERIAL_MANAGER_NON_BLOCKING_MODE (1U) #else #ifndef SERIAL_MANAGER_NON_BLOCKING_MODE -#define SERIAL_MANAGER_NON_BLOCKING_MODE \ - (0U) /* Enable or disable serial manager non-blocking mode (1 - enable, 0 - disable) */ +#define SERIAL_MANAGER_NON_BLOCKING_MODE (0U) #endif #endif +/*! @brief Enable or disable uart port (1 - enable, 0 - disable) */ #ifndef SERIAL_PORT_TYPE_UART -#define SERIAL_PORT_TYPE_UART (1U) /* Enable or disable uart port (1 - enable, 0 - disable) */ +#define SERIAL_PORT_TYPE_UART (0U) #endif +/*! @brief Enable or disable USB CDC port (1 - enable, 0 - disable) */ #ifndef SERIAL_PORT_TYPE_USBCDC -#define SERIAL_PORT_TYPE_USBCDC (0U) /* Enable or disable USB CDC port (1 - enable, 0 - disable) */ +#define SERIAL_PORT_TYPE_USBCDC (0U) #endif +/*! @brief Enable or disable SWO port (1 - enable, 0 - disable) */ #ifndef SERIAL_PORT_TYPE_SWO -#define SERIAL_PORT_TYPE_SWO (0U) /* Enable or disable SWO port (1 - enable, 0 - disable) */ +#define SERIAL_PORT_TYPE_SWO (0U) +#endif + +/*! @brief Enable or disable USB CDC virtual port (1 - enable, 0 - disable) */ +#ifndef SERIAL_PORT_TYPE_USBCDC_VIRTUAL +#define SERIAL_PORT_TYPE_USBCDC_VIRTUAL (0U) #endif +/*! @brief Set serial manager write handle size */ #if (defined(SERIAL_MANAGER_NON_BLOCKING_MODE) && (SERIAL_MANAGER_NON_BLOCKING_MODE > 0U)) #define SERIAL_MANAGER_WRITE_HANDLE_SIZE (44U) #define SERIAL_MANAGER_READ_HANDLE_SIZE (44U) @@ -59,6 +72,15 @@ #include "serial_port_swo.h" #endif +#if (defined(SERIAL_PORT_TYPE_USBCDC_VIRTUAL) && (SERIAL_PORT_TYPE_USBCDC_VIRTUAL > 0U)) + +#if !(defined(SERIAL_MANAGER_NON_BLOCKING_MODE) && (SERIAL_MANAGER_NON_BLOCKING_MODE > 0U)) +#error The serial manager blocking mode cannot be supported for USB CDC. +#endif + +#include "serial_port_usb_virtual.h" +#endif + #define SERIAL_MANAGER_HANDLE_SIZE_TEMP 0U #if (defined(SERIAL_PORT_TYPE_UART) && (SERIAL_PORT_TYPE_UART > 0U)) @@ -87,10 +109,19 @@ #endif -/* SERIAL_PORT_UART_HANDLE_SIZE/SERIAL_PORT_USB_CDC_HANDLE_SIZE + serial manager dedicated size */ +#if (defined(SERIAL_PORT_TYPE_USBCDC_VIRTUAL) && (SERIAL_PORT_TYPE_USBCDC_VIRTUAL > 0U)) + +#if (SERIAL_PORT_USB_VIRTUAL_HANDLE_SIZE > SERIAL_MANAGER_HANDLE_SIZE_TEMP) +#undef SERIAL_MANAGER_HANDLE_SIZE_TEMP +#define SERIAL_MANAGER_HANDLE_SIZE_TEMP SERIAL_PORT_USB_VIRTUAL_HANDLE_SIZE +#endif + +#endif + +/*! @brief SERIAL_PORT_UART_HANDLE_SIZE/SERIAL_PORT_USB_CDC_HANDLE_SIZE + serial manager dedicated size */ #if ((defined(SERIAL_MANAGER_HANDLE_SIZE_TEMP) && (SERIAL_MANAGER_HANDLE_SIZE_TEMP > 0U))) #else -#error SERIAL_PORT_TYPE_UART, SERIAL_PORT_TYPE_USBCDC and SERIAL_PORT_TYPE_SWO should not be cleared at same time. +#error SERIAL_PORT_TYPE_UART, SERIAL_PORT_TYPE_USBCDC, SERIAL_PORT_TYPE_SWO and SERIAL_PORT_TYPE_USBCDC_VIRTUAL should not be cleared at same time. #endif #if (defined(SERIAL_MANAGER_NON_BLOCKING_MODE) && (SERIAL_MANAGER_NON_BLOCKING_MODE > 0U)) @@ -107,13 +138,16 @@ typedef void *serial_handle_t; typedef void *serial_write_handle_t; typedef void *serial_read_handle_t; +/*! @brief serial port type*/ typedef enum _serial_port_type { - kSerialPort_Uart = 1U, /*!< Serial port UART */ - kSerialPort_UsbCdc, /*!< Serial port USB CDC */ - kSerialPort_Swo, /*!< Serial port SWO */ + kSerialPort_Uart = 1U, /*!< Serial port UART */ + kSerialPort_UsbCdc, /*!< Serial port USB CDC */ + kSerialPort_Swo, /*!< Serial port SWO */ + kSerialPort_UsbCdcVirtual, /*!< Serial port USB CDC Virtual */ } serial_port_type_t; +/*! @brief serial manager config structure*/ typedef struct _serial_manager_config { uint8_t *ringBuffer; /*!< Ring buffer address, it is used to buffer data received by the hardware. @@ -124,12 +158,13 @@ typedef struct _serial_manager_config void *portConfig; /*!< Serial port configuration */ } serial_manager_config_t; +/*! @brief serial manager error code*/ typedef enum _serial_manager_status { - kStatus_SerialManager_Success = kStatus_Success, /*!< Success */ - kStatus_SerialManager_Error = MAKE_STATUS(kStatusGroup_SERIALMANAGER, 1), /*!< Failed */ - kStatus_SerialManager_Busy = MAKE_STATUS(kStatusGroup_SERIALMANAGER, 2), /*!< Busy */ - kStatus_SerialManager_Notify = MAKE_STATUS(kStatusGroup_SERIALMANAGER, 3), /*!< Ring buffer is not empty */ + kStatus_SerialManager_Success = kStatus_Success, /*!< Success */ + kStatus_SerialManager_Error = MAKE_STATUS(kStatusGroup_SERIALMANAGER, 1), /*!< Failed */ + kStatus_SerialManager_Busy = MAKE_STATUS(kStatusGroup_SERIALMANAGER, 2), /*!< Busy */ + kStatus_SerialManager_Notify = MAKE_STATUS(kStatusGroup_SERIALMANAGER, 3), /*!< Ring buffer is not empty */ kStatus_SerialManager_Canceled = MAKE_STATUS(kStatusGroup_SERIALMANAGER, 4), /*!< the non-blocking request is canceled */ kStatus_SerialManager_HandleConflict = MAKE_STATUS(kStatusGroup_SERIALMANAGER, 5), /*!< The handle is opened */ @@ -160,21 +195,21 @@ extern "C" { /*! * @brief Initializes a serial manager module with the serial manager handle and the user configuration structure. * - * This function configures the serial manager module with user-defined settings. The user can configure the + * This function configures the Serial Manager module with user-defined settings. The user can configure the * configuration * structure. The parameter serialHandle is a pointer to point to a memory space of size #SERIAL_MANAGER_HANDLE_SIZE * allocated by the caller. - * The serial manager module supports two types serial port, uart (includes UART, USART, LPSCI, LPUART, etc) and USB + * The Serial Manager module supports two types of serial port, UART (includes UART, USART, LPSCI, LPUART, etc) and USB * CDC. * Please refer to #serial_port_type_t for serial port setting. These two types can be set by using * #serial_manager_config_t. * - * Example below shows how to use this API to configure the serial manager. + * Example below shows how to use this API to configure the Serial Manager. * For UART, * @code * #define SERIAL_MANAGER_RING_BUFFER_SIZE (256U) - * static uint8_t s_serialHandleBuffer[SERIAL_MANAGER_HANDLE_SIZE]; - * static serial_handle_t s_serialHandle = &s_serialHandleBuffer[0]; + * static uint32_t s_serialHandleBuffer[((SERIAL_MANAGER_HANDLE_SIZE + sizeof(uint32_t) - 1) / sizeof(uitn32_t))]; + * static serial_handle_t s_serialHandle = (serial_handle_t)&s_serialHandleBuffer[0]; * static uint8_t s_ringBuffer[SERIAL_MANAGER_RING_BUFFER_SIZE]; * * serial_manager_config_t config; @@ -195,8 +230,8 @@ extern "C" { * For USB CDC, * @code * #define SERIAL_MANAGER_RING_BUFFER_SIZE (256U) - * static uint8_t s_serialHandleBuffer[SERIAL_MANAGER_HANDLE_SIZE]; - * static serial_handle_t s_serialHandle = &s_serialHandleBuffer[0]; + * static uint32_t s_serialHandleBuffer[((SERIAL_MANAGER_HANDLE_SIZE + sizeof(uint32_t) - 1) / sizeof(uitn32_t))]; + * static serial_handle_t s_serialHandle = (serial_handle_t)&s_serialHandleBuffer[0]; * static uint8_t s_ringBuffer[SERIAL_MANAGER_RING_BUFFER_SIZE]; * * serial_manager_config_t config; @@ -210,9 +245,10 @@ extern "C" { * @endcode * * @param serialHandle Pointer to point to a memory space of size #SERIAL_MANAGER_HANDLE_SIZE allocated by the caller. + * The handle should be 4 byte aligned, because unaligned access does not support on some devices. * @param config Pointer to user-defined configuration structure. * @retval kStatus_SerialManager_Error An error occurred. - * @retval kStatus_SerialManager_Success The serial manager module initialization succeed. + * @retval kStatus_SerialManager_Success The Serial Manager module initialization succeed. */ serial_manager_status_t SerialManager_Init(serial_handle_t serialHandle, serial_manager_config_t *config); @@ -238,7 +274,9 @@ serial_manager_status_t SerialManager_Deinit(serial_handle_t serialHandle); * is needed for a task. * * @param serialHandle The serial manager module handle pointer. + * The handle should be 4 byte aligned, because unaligned access does not support on some devices. * @param writeHandle The serial manager module writing handle pointer. + * The handle should be 4 byte aligned, because unaligned access does not support on some devices. * @retval kStatus_SerialManager_Error An error occurred. * @retval kStatus_SerialManager_HandleConflict The writing handle was opened. * @retval kStatus_SerialManager_Success The writing handle is opened. @@ -246,19 +284,19 @@ serial_manager_status_t SerialManager_Deinit(serial_handle_t serialHandle); * Example below shows how to use this API to write data. * For task 1, * @code - * static uint8_t s_serialWriteHandleBuffer1[SERIAL_MANAGER_WRITE_HANDLE_SIZE]; - * static serial_write_handle_t s_serialWriteHandle1 = &s_serialWriteHandleBuffer1[0]; - * static uint8_t s_nonBlockingWelcome1[] = "This is non-blocking writing log for task1!\r\n"; - * SerialManager_OpenWriteHandle(serialHandle, s_serialWriteHandle1); + * static uint32_t s_serialWriteHandleBuffer1[((SERIAL_MANAGER_WRITE_HANDLE_SIZE + sizeof(uint32_t) - 1) / + * sizeof(uitn32_t))]; static serial_write_handle_t s_serialWriteHandle1 = + * (serial_write_handle_t)&s_serialWriteHandleBuffer1[0]; static uint8_t s_nonBlockingWelcome1[] = "This is non-blocking + * writing log for task1!\r\n"; SerialManager_OpenWriteHandle(serialHandle, s_serialWriteHandle1); * SerialManager_InstallTxCallback(s_serialWriteHandle1, Task1_SerialManagerTxCallback, s_serialWriteHandle1); * SerialManager_WriteNonBlocking(s_serialWriteHandle1, s_nonBlockingWelcome1, sizeof(s_nonBlockingWelcome1) - 1); * @endcode * For task 2, * @code - * static uint8_t s_serialWriteHandleBuffer2[SERIAL_MANAGER_WRITE_HANDLE_SIZE]; - * static serial_write_handle_t s_serialWriteHandle2 = &s_serialWriteHandleBuffer2[0]; - * static uint8_t s_nonBlockingWelcome2[] = "This is non-blocking writing log for task2!\r\n"; - * SerialManager_OpenWriteHandle(serialHandle, s_serialWriteHandle2); + * static uint32_t s_serialWriteHandleBuffer2[((SERIAL_MANAGER_WRITE_HANDLE_SIZE + sizeof(uint32_t) - 1) / + * sizeof(uitn32_t))]; static serial_write_handle_t s_serialWriteHandle2 = + * (serial_write_handle_t)&s_serialWriteHandleBuffer2[0]; static uint8_t s_nonBlockingWelcome2[] = "This is non-blocking + * writing log for task2!\r\n"; SerialManager_OpenWriteHandle(serialHandle, s_serialWriteHandle2); * SerialManager_InstallTxCallback(s_serialWriteHandle2, Task2_SerialManagerTxCallback, s_serialWriteHandle2); * SerialManager_WriteNonBlocking(s_serialWriteHandle2, s_nonBlockingWelcome2, sizeof(s_nonBlockingWelcome2) - 1); * @endcode @@ -280,20 +318,22 @@ serial_manager_status_t SerialManager_CloseWriteHandle(serial_write_handle_t wri * * This function Opens a reading handle for the serial manager module. The reading handle can not be * opened multiple at the same time. The error code kStatus_SerialManager_Busy would be returned when - * the previous reading handle is not closed. And There can only one buffer for receiving for the + * the previous reading handle is not closed. And There can only be one buffer for receiving for the * reading handle at the same time. * * @param serialHandle The serial manager module handle pointer. + * The handle should be 4 byte aligned, because unaligned access does not support on some devices. * @param readHandle The serial manager module reading handle pointer. + * The handle should be 4 byte aligned, because unaligned access does not support on some devices. * @retval kStatus_SerialManager_Error An error occurred. * @retval kStatus_SerialManager_Success The reading handle is opened. * @retval kStatus_SerialManager_Busy Previous reading handle is not closed. * * Example below shows how to use this API to read data. * @code - * static uint8_t s_serialReadHandleBuffer[SERIAL_MANAGER_READ_HANDLE_SIZE]; - * static serial_read_handle_t s_serialReadHandle = &s_serialReadHandleBuffer[0]; - * SerialManager_OpenReadHandle(serialHandle, s_serialReadHandle); + * static uint32_t s_serialReadHandleBuffer[((SERIAL_MANAGER_READ_HANDLE_SIZE + sizeof(uint32_t) - 1) / + * sizeof(uitn32_t))]; static serial_read_handle_t s_serialReadHandle = + * (serial_read_handle_t)&s_serialReadHandleBuffer[0]; SerialManager_OpenReadHandle(serialHandle, s_serialReadHandle); * static uint8_t s_nonBlockingBuffer[64]; * SerialManager_InstallRxCallback(s_serialReadHandle, APP_SerialManagerRxCallback, s_serialReadHandle); * SerialManager_ReadNonBlocking(s_serialReadHandle, s_nonBlockingBuffer, sizeof(s_nonBlockingBuffer)); @@ -509,5 +549,5 @@ serial_manager_status_t SerialManager_ExitLowpower(serial_handle_t serialHandle) #if defined(__cplusplus) } #endif - +/*! @} */ #endif /* __SERIAL_MANAGER_H__ */