3 * All rights reserved.
\r
6 * SPDX-License-Identifier: BSD-3-Clause
\r
9 #include "fsl_common.h"
\r
12 #include "serial_manager.h"
\r
14 #if (defined(SERIAL_MANAGER_NON_BLOCKING_MODE) && (SERIAL_MANAGER_NON_BLOCKING_MODE > 0U))
\r
16 #include "generic_list.h"
\r
19 * The OSA_USED macro can only be defined when the OSA component is used.
\r
20 * If the source code of the OSA component does not exist, the OSA_USED cannot be defined.
\r
21 * OR, If OSA component is not added into project event the OSA source code exists, the OSA_USED
\r
22 * also cannot be defined.
\r
23 * The source code path of the OSA component is <MCUXpresso_SDK>/components/osa.
\r
26 #if defined(OSA_USED)
\r
28 #if (defined(SERIAL_MANAGER_USE_COMMON_TASK) && (SERIAL_MANAGER_USE_COMMON_TASK > 0U))
\r
29 #include "common_task.h"
\r
31 #include "fsl_os_abstraction.h"
\r
38 /*******************************************************************************
\r
40 ******************************************************************************/
\r
43 #if (defined(DEBUG_CONSOLE_ASSERT_DISABLE) && (DEBUG_CONSOLE_ASSERT_DISABLE > 0U))
\r
49 #define SERIAL_EVENT_DATA_RECEIVED (1U << 0)
\r
50 #define SERIAL_EVENT_DATA_SENT (1U << 1)
\r
52 #define SERIAL_MANAGER_WRITE_TAG 0xAABB5754U
\r
53 #define SERIAL_MANAGER_READ_TAG 0xBBAA5244U
\r
55 #if (defined(SERIAL_MANAGER_NON_BLOCKING_MODE) && (SERIAL_MANAGER_NON_BLOCKING_MODE > 0U))
\r
56 typedef enum _serial_manager_transmission_mode
\r
58 kSerialManager_TransmissionBlocking = 0x0U, /*!< Blocking transmission*/
\r
59 kSerialManager_TransmissionNonBlocking = 0x1U, /*!< None blocking transmission*/
\r
60 } serial_manager_transmission_mode_t;
\r
62 /* TX transfer structure */
\r
63 typedef struct _serial_manager_transfer
\r
66 volatile uint32_t length;
\r
67 volatile uint32_t soFar;
\r
68 serial_manager_transmission_mode_t mode;
\r
69 serial_manager_status_t status;
\r
70 } serial_manager_transfer_t;
\r
73 /* write handle structure */
\r
74 typedef struct _serial_manager_send_handle
\r
76 #if (defined(SERIAL_MANAGER_NON_BLOCKING_MODE) && (SERIAL_MANAGER_NON_BLOCKING_MODE > 0U))
\r
77 list_element_t link; /*!< list element of the link */
\r
78 serial_manager_transfer_t transfer;
\r
80 struct _serial_manager_handle *serialManagerHandle;
\r
81 #if (defined(SERIAL_MANAGER_NON_BLOCKING_MODE) && (SERIAL_MANAGER_NON_BLOCKING_MODE > 0U))
\r
82 serial_manager_callback_t callback;
\r
83 void *callbackParam;
\r
86 } serial_manager_write_handle_t;
\r
88 typedef serial_manager_write_handle_t serial_manager_read_handle_t;
\r
90 #if (defined(SERIAL_MANAGER_NON_BLOCKING_MODE) && (SERIAL_MANAGER_NON_BLOCKING_MODE > 0U))
\r
91 /* receive state structure */
\r
92 typedef struct _serial_manager_read_ring_buffer
\r
94 uint8_t *ringBuffer;
\r
95 uint32_t ringBufferSize;
\r
96 volatile uint32_t ringHead;
\r
97 volatile uint32_t ringTail;
\r
98 } serial_manager_read_ring_buffer_t;
\r
101 #if defined(__CC_ARM)
\r
102 #pragma anon_unions
\r
104 /* The serial manager handle structure */
\r
105 typedef struct _serial_manager_handle
\r
107 #if (defined(SERIAL_MANAGER_NON_BLOCKING_MODE) && (SERIAL_MANAGER_NON_BLOCKING_MODE > 0U))
\r
108 list_t runningWriteHandleHead; /*!< The queue of running write handle */
\r
109 list_t completedWriteHandleHead; /*!< The queue of completed write handle */
\r
111 serial_manager_read_handle_t *openedReadHandleHead;
\r
112 uint32_t openedWriteHandleCount;
\r
115 uint8_t lowLevelhandleBuffer[1];
\r
116 #if (defined(SERIAL_PORT_TYPE_UART) && (SERIAL_PORT_TYPE_UART > 0U))
\r
117 uint8_t uartHandleBuffer[SERIAL_PORT_UART_HANDLE_SIZE];
\r
119 #if (defined(SERIAL_PORT_TYPE_USBCDC) && (SERIAL_PORT_TYPE_USBCDC > 0U))
\r
120 uint8_t usbcdcHandleBuffer[SERIAL_PORT_USB_CDC_HANDLE_SIZE];
\r
122 #if (defined(SERIAL_PORT_TYPE_SWO) && (SERIAL_PORT_TYPE_SWO > 0U))
\r
123 uint8_t swoHandleBuffer[SERIAL_PORT_SWO_HANDLE_SIZE];
\r
126 #if (defined(SERIAL_MANAGER_NON_BLOCKING_MODE) && (SERIAL_MANAGER_NON_BLOCKING_MODE > 0U))
\r
127 serial_manager_read_ring_buffer_t ringBuffer;
\r
130 #if (defined(SERIAL_MANAGER_NON_BLOCKING_MODE) && (SERIAL_MANAGER_NON_BLOCKING_MODE > 0U))
\r
132 #if defined(OSA_USED)
\r
134 #if (defined(SERIAL_MANAGER_USE_COMMON_TASK) && (SERIAL_MANAGER_USE_COMMON_TASK > 0U))
\r
135 common_task_message_t commontaskMsg;
\r
137 uint8_t event[OSA_EVENT_HANDLE_SIZE]; /*!< Event instance */
\r
138 uint8_t taskId[OSA_TASK_HANDLE_SIZE]; /*!< Task handle */
\r
145 serial_port_type_t type;
\r
146 } serial_manager_handle_t;
\r
148 /*******************************************************************************
\r
150 ******************************************************************************/
\r
152 #if (defined(SERIAL_PORT_TYPE_UART) && (SERIAL_PORT_TYPE_UART > 0U))
\r
153 serial_manager_status_t Serial_UartInit(serial_handle_t serialHandle, void *config);
\r
154 serial_manager_status_t Serial_UartDeinit(serial_handle_t serialHandle);
\r
155 serial_manager_status_t Serial_UartWrite(serial_handle_t serialHandle, uint8_t *buffer, uint32_t length);
\r
156 #if !(defined(SERIAL_MANAGER_NON_BLOCKING_MODE) && (SERIAL_MANAGER_NON_BLOCKING_MODE > 0U))
\r
157 serial_manager_status_t Serial_UartRead(serial_handle_t serialHandle, uint8_t *buffer, uint32_t length);
\r
159 serial_manager_status_t Serial_UartCancelWrite(serial_handle_t serialHandle);
\r
160 serial_manager_status_t Serial_UartInstallTxCallback(serial_handle_t serialHandle,
\r
161 serial_manager_callback_t callback,
\r
162 void *callbackParam);
\r
163 serial_manager_status_t Serial_UartInstallRxCallback(serial_handle_t serialHandle,
\r
164 serial_manager_callback_t callback,
\r
165 void *callbackParam);
\r
166 void Serial_UartIsrFunction(serial_handle_t serialHandle);
\r
169 #if (defined(SERIAL_PORT_TYPE_USBCDC) && (SERIAL_PORT_TYPE_USBCDC > 0U))
\r
170 serial_manager_status_t Serial_UsbCdcInit(serial_handle_t serialHandle, void *config);
\r
171 serial_manager_status_t Serial_UsbCdcDeinit(serial_handle_t serialHandle);
\r
172 serial_manager_status_t Serial_UsbCdcWrite(serial_handle_t serialHandle, uint8_t *buffer, uint32_t length);
\r
173 serial_manager_status_t Serial_UsbCdcCancelWrite(serial_handle_t serialHandle);
\r
174 serial_manager_status_t Serial_UsbCdcInstallTxCallback(serial_handle_t serialHandle,
\r
175 serial_manager_callback_t callback,
\r
176 void *callbackParam);
\r
177 serial_manager_status_t Serial_UsbCdcInstallRxCallback(serial_handle_t serialHandle,
\r
178 serial_manager_callback_t callback,
\r
179 void *callbackParam);
\r
180 void Serial_UsbCdcIsrFunction(serial_handle_t serialHandle);
\r
183 #if (defined(SERIAL_PORT_TYPE_SWO) && (SERIAL_PORT_TYPE_SWO > 0U))
\r
184 serial_manager_status_t Serial_SwoInit(serial_handle_t serialHandle, void *config);
\r
185 serial_manager_status_t Serial_SwoDeinit(serial_handle_t serialHandle);
\r
186 serial_manager_status_t Serial_SwoWrite(serial_handle_t serialHandle, uint8_t *buffer, uint32_t length);
\r
187 #if !(defined(SERIAL_MANAGER_NON_BLOCKING_MODE) && (SERIAL_MANAGER_NON_BLOCKING_MODE > 0U))
\r
188 serial_manager_status_t Serial_SwoRead(serial_handle_t serialHandle, uint8_t *buffer, uint32_t length);
\r
190 serial_manager_status_t Serial_SwoCancelWrite(serial_handle_t serialHandle);
\r
191 serial_manager_status_t Serial_SwoInstallTxCallback(serial_handle_t serialHandle,
\r
192 serial_manager_callback_t callback,
\r
193 void *callbackParam);
\r
194 serial_manager_status_t Serial_SwoInstallRxCallback(serial_handle_t serialHandle,
\r
195 serial_manager_callback_t callback,
\r
196 void *callbackParam);
\r
197 void Serial_SwoIsrFunction(serial_handle_t serialHandle);
\r
200 #if (defined(SERIAL_MANAGER_NON_BLOCKING_MODE) && (SERIAL_MANAGER_NON_BLOCKING_MODE > 0U))
\r
201 static void SerialManager_Task(void *param);
\r
204 /*******************************************************************************
\r
206 ******************************************************************************/
\r
208 #if (defined(SERIAL_MANAGER_NON_BLOCKING_MODE) && (SERIAL_MANAGER_NON_BLOCKING_MODE > 0U))
\r
210 #if defined(OSA_USED)
\r
212 #if (defined(SERIAL_MANAGER_USE_COMMON_TASK) && (SERIAL_MANAGER_USE_COMMON_TASK > 0U))
\r
216 * \brief Defines the serial manager task's stack
\r
218 OSA_TASK_DEFINE(SerialManager_Task, SERIAL_MANAGER_TASK_PRIORITY, 1, SERIAL_MANAGER_TASK_STACK_SIZE, false);
\r
225 /*******************************************************************************
\r
227 ******************************************************************************/
\r
229 #if (defined(SERIAL_MANAGER_NON_BLOCKING_MODE) && (SERIAL_MANAGER_NON_BLOCKING_MODE > 0U))
\r
230 static void SerialManager_AddTail(list_t *queue, serial_manager_write_handle_t *node)
\r
232 LIST_AddTail(queue, &node->link);
\r
235 static void SerialManager_RemoveHead(list_t *queue)
\r
237 LIST_RemoveHead(queue);
\r
241 #if (defined(SERIAL_MANAGER_NON_BLOCKING_MODE) && (SERIAL_MANAGER_NON_BLOCKING_MODE > 0U))
\r
243 static serial_manager_status_t SerialManager_StartWriting(serial_manager_handle_t *handle)
\r
245 serial_manager_status_t status = kStatus_SerialManager_Error;
\r
246 serial_manager_write_handle_t *writeHandle =
\r
247 (serial_manager_write_handle_t *)LIST_GetHead(&handle->runningWriteHandleHead);
\r
251 switch (handle->type)
\r
253 #if (defined(SERIAL_PORT_TYPE_UART) && (SERIAL_PORT_TYPE_UART > 0U))
\r
254 case kSerialPort_Uart:
\r
255 status = Serial_UartWrite(((serial_handle_t)&handle->lowLevelhandleBuffer[0]),
\r
256 writeHandle->transfer.buffer, writeHandle->transfer.length);
\r
259 #if (defined(SERIAL_PORT_TYPE_USBCDC) && (SERIAL_PORT_TYPE_USBCDC > 0U))
\r
260 case kSerialPort_UsbCdc:
\r
261 status = Serial_UsbCdcWrite(((serial_handle_t)&handle->lowLevelhandleBuffer[0]),
\r
262 writeHandle->transfer.buffer, writeHandle->transfer.length);
\r
265 #if (defined(SERIAL_PORT_TYPE_SWO) && (SERIAL_PORT_TYPE_SWO > 0U))
\r
266 case kSerialPort_Swo:
\r
267 status = Serial_SwoWrite(((serial_handle_t)&handle->lowLevelhandleBuffer[0]),
\r
268 writeHandle->transfer.buffer, writeHandle->transfer.length);
\r
280 static serial_manager_status_t SerialManager_StartWriting(serial_manager_handle_t *handle,
\r
281 serial_manager_write_handle_t *writeHandle,
\r
285 serial_manager_status_t status = kStatus_SerialManager_Error;
\r
289 switch (handle->type)
\r
291 #if (defined(SERIAL_PORT_TYPE_UART) && (SERIAL_PORT_TYPE_UART > 0U))
\r
292 case kSerialPort_Uart:
\r
293 status = Serial_UartWrite(((serial_handle_t)&handle->lowLevelhandleBuffer[0]), buffer, length);
\r
296 #if (defined(SERIAL_PORT_TYPE_USBCDC) && (SERIAL_PORT_TYPE_USBCDC > 0U))
\r
297 case kSerialPort_UsbCdc:
\r
298 status = Serial_UsbCdcWrite(((serial_handle_t)&handle->lowLevelhandleBuffer[0]), buffer, length);
\r
301 #if (defined(SERIAL_PORT_TYPE_SWO) && (SERIAL_PORT_TYPE_SWO > 0U))
\r
302 case kSerialPort_Swo:
\r
303 status = Serial_SwoWrite(((serial_handle_t)&handle->lowLevelhandleBuffer[0]), buffer, length);
\r
313 static serial_manager_status_t SerialManager_StartReading(serial_manager_handle_t *handle,
\r
314 serial_manager_read_handle_t *readHandle,
\r
318 serial_manager_status_t status = kStatus_SerialManager_Error;
\r
322 switch (handle->type)
\r
324 #if (defined(SERIAL_PORT_TYPE_UART) && (SERIAL_PORT_TYPE_UART > 0U))
\r
325 case kSerialPort_Uart:
\r
326 status = Serial_UartRead(((serial_handle_t)&handle->lowLevelhandleBuffer[0]), buffer, length);
\r
329 #if (defined(SERIAL_PORT_TYPE_USBCDC) && (SERIAL_PORT_TYPE_USBCDC > 0U))
\r
330 case kSerialPort_UsbCdc:
\r
331 status = Serial_UsbCdcRead(((serial_handle_t)&handle->lowLevelhandleBuffer[0]), buffer, length);
\r
334 #if (defined(SERIAL_PORT_TYPE_SWO) && (SERIAL_PORT_TYPE_SWO > 0U))
\r
335 case kSerialPort_Swo:
\r
336 status = Serial_SwoRead(((serial_handle_t)&handle->lowLevelhandleBuffer[0]), buffer, length);
\r
347 #if (defined(SERIAL_MANAGER_NON_BLOCKING_MODE) && (SERIAL_MANAGER_NON_BLOCKING_MODE > 0U))
\r
348 static void SerialManager_IsrFunction(serial_manager_handle_t *handle)
\r
350 uint32_t regPrimask = DisableGlobalIRQ();
\r
351 switch (handle->type)
\r
353 #if (defined(SERIAL_PORT_TYPE_UART) && (SERIAL_PORT_TYPE_UART > 0U))
\r
354 case kSerialPort_Uart:
\r
355 Serial_UartIsrFunction(((serial_handle_t)&handle->lowLevelhandleBuffer[0]));
\r
358 #if (defined(SERIAL_PORT_TYPE_USBCDC) && (SERIAL_PORT_TYPE_USBCDC > 0U))
\r
359 case kSerialPort_UsbCdc:
\r
360 Serial_UsbCdcIsrFunction(((serial_handle_t)&handle->lowLevelhandleBuffer[0]));
\r
363 #if (defined(SERIAL_PORT_TYPE_SWO) && (SERIAL_PORT_TYPE_SWO > 0U))
\r
364 case kSerialPort_Swo:
\r
365 Serial_SwoIsrFunction(((serial_handle_t)&handle->lowLevelhandleBuffer[0]));
\r
371 EnableGlobalIRQ(regPrimask);
\r
374 static void SerialManager_Task(void *param)
\r
376 serial_manager_handle_t *handle = (serial_manager_handle_t *)param;
\r
377 serial_manager_write_handle_t *serialWriteHandle;
\r
378 serial_manager_read_handle_t *serialReadHandle;
\r
379 serial_manager_callback_message_t msg;
\r
380 if (NULL != handle)
\r
382 #if defined(OSA_USED)
\r
384 #if (defined(SERIAL_MANAGER_USE_COMMON_TASK) && (SERIAL_MANAGER_USE_COMMON_TASK > 0U))
\r
386 osa_event_flags_t ev = 0;
\r
390 if (KOSA_StatusSuccess ==
\r
391 OSA_EventWait((osa_event_handle_t)handle->event, osaEventFlagsAll_c, false, osaWaitForever_c, &ev))
\r
393 if (ev & SERIAL_EVENT_DATA_SENT)
\r
398 serialWriteHandle = (serial_manager_write_handle_t *)LIST_GetHead(&handle->completedWriteHandleHead);
\r
399 while (NULL != serialWriteHandle)
\r
401 SerialManager_RemoveHead(&handle->completedWriteHandleHead);
\r
402 msg.buffer = serialWriteHandle->transfer.buffer;
\r
403 msg.length = serialWriteHandle->transfer.soFar;
\r
404 serialWriteHandle->transfer.buffer = NULL;
\r
405 if (serialWriteHandle->callback)
\r
407 serialWriteHandle->callback(serialWriteHandle->callbackParam, &msg,
\r
408 serialWriteHandle->transfer.status);
\r
410 serialWriteHandle = (serial_manager_write_handle_t *)LIST_GetHead(&handle->completedWriteHandleHead);
\r
413 #if defined(OSA_USED)
\r
415 #if (defined(SERIAL_MANAGER_USE_COMMON_TASK) && (SERIAL_MANAGER_USE_COMMON_TASK > 0U))
\r
417 if (ev & SERIAL_EVENT_DATA_RECEIVED)
\r
422 serialReadHandle = handle->openedReadHandleHead;
\r
423 if ((serialReadHandle) && (serialReadHandle->transfer.buffer) &&
\r
424 (serialReadHandle->transfer.soFar >= serialReadHandle->transfer.length))
\r
426 msg.buffer = serialReadHandle->transfer.buffer;
\r
427 msg.length = serialReadHandle->transfer.soFar;
\r
428 serialReadHandle->transfer.buffer = NULL;
\r
429 if (serialReadHandle->callback)
\r
431 serialReadHandle->callback(serialReadHandle->callbackParam, &msg,
\r
432 serialReadHandle->transfer.status);
\r
436 #if defined(OSA_USED)
\r
438 #if (defined(SERIAL_MANAGER_USE_COMMON_TASK) && (SERIAL_MANAGER_USE_COMMON_TASK > 0U))
\r
441 } while (gUseRtos_c);
\r
449 #if (defined(SERIAL_MANAGER_NON_BLOCKING_MODE) && (SERIAL_MANAGER_NON_BLOCKING_MODE > 0U))
\r
450 static void SerialManager_TxCallback(void *callbackParam,
\r
451 serial_manager_callback_message_t *message,
\r
452 serial_manager_status_t status)
\r
454 serial_manager_handle_t *handle;
\r
455 serial_manager_write_handle_t *writeHandle;
\r
457 assert(callbackParam);
\r
460 handle = (serial_manager_handle_t *)callbackParam;
\r
462 writeHandle = (serial_manager_write_handle_t *)LIST_GetHead(&handle->runningWriteHandleHead);
\r
464 if (NULL != writeHandle)
\r
466 SerialManager_RemoveHead(&handle->runningWriteHandleHead);
\r
467 SerialManager_StartWriting(handle);
\r
468 writeHandle->transfer.soFar = message->length;
\r
469 writeHandle->transfer.status = status;
\r
470 if (kSerialManager_TransmissionNonBlocking == writeHandle->transfer.mode)
\r
472 SerialManager_AddTail(&handle->completedWriteHandleHead, writeHandle);
\r
473 #if defined(OSA_USED)
\r
475 #if (defined(SERIAL_MANAGER_USE_COMMON_TASK) && (SERIAL_MANAGER_USE_COMMON_TASK > 0U))
\r
476 handle->commontaskMsg.callback = SerialManager_Task;
\r
477 handle->commontaskMsg.callbackParam = handle;
\r
478 COMMON_TASK_post_message(&handle->commontaskMsg);
\r
480 (void)OSA_EventSet((osa_event_handle_t)handle->event, SERIAL_EVENT_DATA_SENT);
\r
484 SerialManager_Task(handle);
\r
489 writeHandle->transfer.buffer = NULL;
\r
494 static void SerialManager_RxCallback(void *callbackParam,
\r
495 serial_manager_callback_message_t *message,
\r
496 serial_manager_status_t status)
\r
498 serial_manager_handle_t *handle;
\r
499 uint32_t ringBufferLength;
\r
501 assert(callbackParam);
\r
504 handle = (serial_manager_handle_t *)callbackParam;
\r
506 status = kStatus_SerialManager_Notify;
\r
508 for (int i = 0; i < message->length; i++)
\r
510 handle->ringBuffer.ringBuffer[handle->ringBuffer.ringHead++] = message->buffer[i];
\r
511 if (handle->ringBuffer.ringHead >= handle->ringBuffer.ringBufferSize)
\r
513 handle->ringBuffer.ringHead = 0U;
\r
515 if (handle->ringBuffer.ringHead == handle->ringBuffer.ringTail)
\r
517 status = kStatus_SerialManager_RingBufferOverflow;
\r
518 handle->ringBuffer.ringTail++;
\r
519 if (handle->ringBuffer.ringTail >= handle->ringBuffer.ringBufferSize)
\r
521 handle->ringBuffer.ringTail = 0U;
\r
526 ringBufferLength = handle->ringBuffer.ringHead + handle->ringBuffer.ringBufferSize - handle->ringBuffer.ringTail;
\r
527 ringBufferLength = ringBufferLength % handle->ringBuffer.ringBufferSize;
\r
529 if ((handle->openedReadHandleHead) && (handle->openedReadHandleHead->transfer.buffer))
\r
531 if (handle->openedReadHandleHead->transfer.length > handle->openedReadHandleHead->transfer.soFar)
\r
534 handle->openedReadHandleHead->transfer.length - handle->openedReadHandleHead->transfer.soFar;
\r
535 for (int i = 0; i < MIN(ringBufferLength, remainLength); i++)
\r
537 handle->openedReadHandleHead->transfer.buffer[handle->openedReadHandleHead->transfer.soFar] =
\r
538 handle->ringBuffer.ringBuffer[handle->ringBuffer.ringTail];
\r
539 handle->ringBuffer.ringTail++;
\r
540 handle->openedReadHandleHead->transfer.soFar++;
\r
541 if (handle->ringBuffer.ringTail >= handle->ringBuffer.ringBufferSize)
\r
543 handle->ringBuffer.ringTail = 0U;
\r
546 ringBufferLength = ringBufferLength - MIN(ringBufferLength, remainLength);
\r
549 if (handle->openedReadHandleHead->transfer.length > handle->openedReadHandleHead->transfer.soFar)
\r
554 if (kSerialManager_TransmissionBlocking == handle->openedReadHandleHead->transfer.mode)
\r
556 handle->openedReadHandleHead->transfer.buffer = NULL;
\r
560 handle->openedReadHandleHead->transfer.status = kStatus_SerialManager_Success;
\r
562 #if defined(OSA_USED)
\r
564 #if (defined(SERIAL_MANAGER_USE_COMMON_TASK) && (SERIAL_MANAGER_USE_COMMON_TASK > 0U))
\r
565 handle->commontaskMsg.callback = SerialManager_Task;
\r
566 handle->commontaskMsg.callbackParam = handle;
\r
567 COMMON_TASK_post_message(&handle->commontaskMsg);
\r
569 (void)OSA_EventSet((osa_event_handle_t)handle->event, SERIAL_EVENT_DATA_RECEIVED);
\r
573 SerialManager_Task(handle);
\r
579 if (ringBufferLength)
\r
581 message->buffer = NULL;
\r
582 message->length = ringBufferLength;
\r
583 if ((NULL != handle->openedReadHandleHead->callback))
\r
585 handle->openedReadHandleHead->callback(handle->openedReadHandleHead->callbackParam, message, status);
\r
590 static serial_manager_status_t SerialManager_Write(serial_write_handle_t writeHandle,
\r
593 serial_manager_transmission_mode_t mode)
\r
595 serial_manager_write_handle_t *serialWriteHandle;
\r
596 serial_manager_handle_t *handle;
\r
597 serial_manager_status_t status = kStatus_SerialManager_Success;
\r
599 uint8_t isEmpty = 0U;
\r
601 assert(writeHandle);
\r
605 serialWriteHandle = (serial_manager_write_handle_t *)writeHandle;
\r
606 handle = serialWriteHandle->serialManagerHandle;
\r
609 assert(SERIAL_MANAGER_WRITE_TAG == serialWriteHandle->tag);
\r
610 assert(!((kSerialManager_TransmissionNonBlocking == mode) && (NULL == serialWriteHandle->callback)));
\r
612 primask = DisableGlobalIRQ();
\r
613 if (serialWriteHandle->transfer.buffer)
\r
615 EnableGlobalIRQ(primask);
\r
616 return kStatus_SerialManager_Busy;
\r
618 serialWriteHandle->transfer.buffer = buffer;
\r
619 serialWriteHandle->transfer.length = length;
\r
620 serialWriteHandle->transfer.soFar = 0U;
\r
621 serialWriteHandle->transfer.mode = mode;
\r
623 if (NULL == LIST_GetHead(&handle->runningWriteHandleHead))
\r
627 SerialManager_AddTail(&handle->runningWriteHandleHead, serialWriteHandle);
\r
628 EnableGlobalIRQ(primask);
\r
632 status = SerialManager_StartWriting(handle);
\r
633 if (kStatus_SerialManager_Success != status)
\r
639 if (kSerialManager_TransmissionBlocking == mode)
\r
641 while (serialWriteHandle->transfer.length > serialWriteHandle->transfer.soFar)
\r
643 #if defined(__GIC_PRIO_BITS)
\r
644 if ((__get_CPSR() & CPSR_M_Msk) == 0x13)
\r
649 SerialManager_IsrFunction(handle);
\r
653 return kStatus_SerialManager_Success;
\r
656 static serial_manager_status_t SerialManager_Read(serial_read_handle_t readHandle,
\r
659 serial_manager_transmission_mode_t mode,
\r
660 uint32_t *receivedLength)
\r
662 serial_manager_read_handle_t *serialReadHandle;
\r
663 serial_manager_handle_t *handle;
\r
664 uint32_t dataLength;
\r
667 assert(readHandle);
\r
671 serialReadHandle = (serial_manager_read_handle_t *)readHandle;
\r
672 handle = serialReadHandle->serialManagerHandle;
\r
675 assert(SERIAL_MANAGER_READ_TAG == serialReadHandle->tag);
\r
676 assert(!((kSerialManager_TransmissionNonBlocking == mode) && (NULL == serialReadHandle->callback)));
\r
678 primask = DisableGlobalIRQ();
\r
679 if (serialReadHandle->transfer.buffer)
\r
681 EnableGlobalIRQ(primask);
\r
682 return kStatus_SerialManager_Busy;
\r
684 serialReadHandle->transfer.buffer = buffer;
\r
685 serialReadHandle->transfer.length = length;
\r
686 serialReadHandle->transfer.soFar = 0U;
\r
687 serialReadHandle->transfer.mode = mode;
\r
689 dataLength = handle->ringBuffer.ringHead + handle->ringBuffer.ringBufferSize - handle->ringBuffer.ringTail;
\r
690 dataLength = dataLength % handle->ringBuffer.ringBufferSize;
\r
692 for (; serialReadHandle->transfer.soFar < MIN(dataLength, length); serialReadHandle->transfer.soFar++)
\r
694 buffer[serialReadHandle->transfer.soFar] = handle->ringBuffer.ringBuffer[handle->ringBuffer.ringTail];
\r
695 handle->ringBuffer.ringTail++;
\r
696 if (handle->ringBuffer.ringTail >= handle->ringBuffer.ringBufferSize)
\r
698 handle->ringBuffer.ringTail = 0U;
\r
701 EnableGlobalIRQ(primask);
\r
703 if (receivedLength)
\r
705 *receivedLength = serialReadHandle->transfer.soFar;
\r
706 serialReadHandle->transfer.buffer = NULL;
\r
710 if (serialReadHandle->transfer.soFar >= serialReadHandle->transfer.length)
\r
712 serialReadHandle->transfer.buffer = NULL;
\r
713 if (kSerialManager_TransmissionNonBlocking == mode)
\r
715 if (serialReadHandle->callback)
\r
717 serial_manager_callback_message_t msg;
\r
718 msg.buffer = buffer;
\r
719 msg.length = serialReadHandle->transfer.soFar;
\r
720 serialReadHandle->callback(serialReadHandle->callbackParam, &msg, kStatus_SerialManager_Success);
\r
725 if (kSerialManager_TransmissionBlocking == mode)
\r
727 while (serialReadHandle->transfer.length > serialReadHandle->transfer.soFar)
\r
733 return kStatus_SerialManager_Success;
\r
738 static serial_manager_status_t SerialManager_Write(serial_write_handle_t writeHandle, uint8_t *buffer, uint32_t length)
\r
740 serial_manager_write_handle_t *serialWriteHandle;
\r
741 serial_manager_handle_t *handle;
\r
743 assert(writeHandle);
\r
747 serialWriteHandle = (serial_manager_write_handle_t *)writeHandle;
\r
748 handle = serialWriteHandle->serialManagerHandle;
\r
752 return SerialManager_StartWriting(handle, serialWriteHandle, buffer, length);
\r
755 static serial_manager_status_t SerialManager_Read(serial_read_handle_t readHandle, uint8_t *buffer, uint32_t length)
\r
757 serial_manager_read_handle_t *serialReadHandle;
\r
758 serial_manager_handle_t *handle;
\r
760 assert(readHandle);
\r
764 serialReadHandle = (serial_manager_read_handle_t *)readHandle;
\r
765 handle = serialReadHandle->serialManagerHandle;
\r
769 return SerialManager_StartReading(handle, serialReadHandle, buffer, length);
\r
773 serial_manager_status_t SerialManager_Init(serial_handle_t serialHandle, serial_manager_config_t *config)
\r
775 serial_manager_handle_t *handle;
\r
776 serial_manager_status_t status = kStatus_SerialManager_Error;
\r
779 #if (defined(SERIAL_MANAGER_NON_BLOCKING_MODE) && (SERIAL_MANAGER_NON_BLOCKING_MODE > 0U))
\r
780 assert(config->ringBuffer);
\r
781 assert(config->ringBufferSize);
\r
783 assert(serialHandle);
\r
784 if (SERIAL_MANAGER_HANDLE_SIZE < sizeof(serial_manager_handle_t))
\r
786 return kStatus_SerialManager_Error;
\r
789 handle = (serial_manager_handle_t *)serialHandle;
\r
791 memset(handle, 0, SERIAL_MANAGER_HANDLE_SIZE);
\r
793 #if (defined(SERIAL_MANAGER_NON_BLOCKING_MODE) && (SERIAL_MANAGER_NON_BLOCKING_MODE > 0U))
\r
795 #if defined(OSA_USED)
\r
797 #if (defined(SERIAL_MANAGER_USE_COMMON_TASK) && (SERIAL_MANAGER_USE_COMMON_TASK > 0U))
\r
799 COMMON_TASK_init();
\r
802 if (KOSA_StatusSuccess != OSA_EventCreate((osa_event_handle_t)handle->event, true))
\r
804 return kStatus_SerialManager_Error;
\r
807 if (KOSA_StatusSuccess != OSA_TaskCreate((osa_task_handle_t)handle->taskId, OSA_TASK(SerialManager_Task), handle))
\r
809 return kStatus_SerialManager_Error;
\r
817 handle->type = config->type;
\r
819 #if (defined(SERIAL_MANAGER_NON_BLOCKING_MODE) && (SERIAL_MANAGER_NON_BLOCKING_MODE > 0U))
\r
820 handle->ringBuffer.ringBuffer = config->ringBuffer;
\r
821 handle->ringBuffer.ringBufferSize = config->ringBufferSize;
\r
824 switch (config->type)
\r
826 #if (defined(SERIAL_PORT_TYPE_UART) && (SERIAL_PORT_TYPE_UART > 0U))
\r
827 case kSerialPort_Uart:
\r
828 status = Serial_UartInit(((serial_handle_t)&handle->lowLevelhandleBuffer[0]), config->portConfig);
\r
829 #if (defined(SERIAL_MANAGER_NON_BLOCKING_MODE) && (SERIAL_MANAGER_NON_BLOCKING_MODE > 0U))
\r
830 if (kStatus_SerialManager_Success == status)
\r
832 status = Serial_UartInstallTxCallback(((serial_handle_t)&handle->lowLevelhandleBuffer[0]),
\r
833 SerialManager_TxCallback, handle);
\r
834 if (kStatus_SerialManager_Success == status)
\r
836 status = Serial_UartInstallRxCallback(((serial_handle_t)&handle->lowLevelhandleBuffer[0]),
\r
837 SerialManager_RxCallback, handle);
\r
843 #if (defined(SERIAL_PORT_TYPE_USBCDC) && (SERIAL_PORT_TYPE_USBCDC > 0U))
\r
844 case kSerialPort_UsbCdc:
\r
845 status = Serial_UsbCdcInit(((serial_handle_t)&handle->lowLevelhandleBuffer[0]), config->portConfig);
\r
846 #if (defined(SERIAL_MANAGER_NON_BLOCKING_MODE) && (SERIAL_MANAGER_NON_BLOCKING_MODE > 0U))
\r
847 if (kStatus_SerialManager_Success == status)
\r
849 status = Serial_UsbCdcInstallTxCallback(((serial_handle_t)&handle->lowLevelhandleBuffer[0]),
\r
850 SerialManager_TxCallback, handle);
\r
851 if (kStatus_SerialManager_Success == status)
\r
853 status = Serial_UsbCdcInstallRxCallback(((serial_handle_t)&handle->lowLevelhandleBuffer[0]),
\r
854 SerialManager_RxCallback, handle);
\r
860 #if (defined(SERIAL_PORT_TYPE_SWO) && (SERIAL_PORT_TYPE_SWO > 0U))
\r
861 case kSerialPort_Swo:
\r
862 status = Serial_SwoInit(((serial_handle_t)&handle->lowLevelhandleBuffer[0]), config->portConfig);
\r
863 #if (defined(SERIAL_MANAGER_NON_BLOCKING_MODE) && (SERIAL_MANAGER_NON_BLOCKING_MODE > 0U))
\r
864 if (kStatus_SerialManager_Success == status)
\r
866 status = Serial_SwoInstallTxCallback(((serial_handle_t)&handle->lowLevelhandleBuffer[0]),
\r
867 SerialManager_TxCallback, handle);
\r
879 serial_manager_status_t SerialManager_Deinit(serial_handle_t serialHandle)
\r
881 serial_manager_handle_t *handle;
\r
883 assert(serialHandle);
\r
885 handle = (serial_manager_handle_t *)serialHandle;
\r
887 if ((handle->openedReadHandleHead) || (handle->openedWriteHandleCount))
\r
889 return kStatus_SerialManager_Busy;
\r
892 switch (handle->type)
\r
894 #if (defined(SERIAL_PORT_TYPE_UART) && (SERIAL_PORT_TYPE_UART > 0U))
\r
895 case kSerialPort_Uart:
\r
896 Serial_UartDeinit(((serial_handle_t)&handle->lowLevelhandleBuffer[0]));
\r
899 #if (defined(SERIAL_PORT_TYPE_USBCDC) && (SERIAL_PORT_TYPE_USBCDC > 0U))
\r
900 case kSerialPort_UsbCdc:
\r
901 Serial_UsbCdcDeinit(((serial_handle_t)&handle->lowLevelhandleBuffer[0]));
\r
904 #if (defined(SERIAL_PORT_TYPE_SWO) && (SERIAL_PORT_TYPE_SWO > 0U))
\r
905 case kSerialPort_Swo:
\r
906 Serial_SwoDeinit(((serial_handle_t)&handle->lowLevelhandleBuffer[0]));
\r
912 #if (defined(SERIAL_MANAGER_NON_BLOCKING_MODE) && (SERIAL_MANAGER_NON_BLOCKING_MODE > 0U))
\r
914 #if defined(OSA_USED)
\r
916 #if (defined(SERIAL_MANAGER_USE_COMMON_TASK) && (SERIAL_MANAGER_USE_COMMON_TASK > 0U))
\r
918 OSA_EventDestroy((osa_event_handle_t)handle->event);
\r
919 OSA_TaskDestroy((osa_task_handle_t)handle->taskId);
\r
926 return kStatus_SerialManager_Success;
\r
929 serial_manager_status_t SerialManager_OpenWriteHandle(serial_handle_t serialHandle, serial_write_handle_t writeHandle)
\r
931 serial_manager_handle_t *handle;
\r
932 serial_manager_write_handle_t *serialWriteHandle;
\r
934 assert(serialHandle);
\r
935 assert(writeHandle);
\r
936 if (SERIAL_MANAGER_WRITE_HANDLE_SIZE < sizeof(serial_manager_write_handle_t))
\r
938 return kStatus_SerialManager_Error;
\r
940 handle = (serial_manager_handle_t *)serialHandle;
\r
941 serialWriteHandle = (serial_manager_write_handle_t *)writeHandle;
\r
943 memset(writeHandle, 0, SERIAL_MANAGER_WRITE_HANDLE_SIZE);
\r
945 handle->openedWriteHandleCount++;
\r
947 serialWriteHandle->serialManagerHandle = handle;
\r
948 #if (defined(SERIAL_MANAGER_NON_BLOCKING_MODE) && (SERIAL_MANAGER_NON_BLOCKING_MODE > 0U))
\r
949 serialWriteHandle->tag = SERIAL_MANAGER_WRITE_TAG;
\r
952 return kStatus_SerialManager_Success;
\r
955 serial_manager_status_t SerialManager_CloseWriteHandle(serial_write_handle_t writeHandle)
\r
957 serial_manager_handle_t *handle;
\r
958 serial_manager_write_handle_t *serialWriteHandle;
\r
960 assert(writeHandle);
\r
962 serialWriteHandle = (serial_manager_write_handle_t *)writeHandle;
\r
963 handle = (serial_manager_handle_t *)serialWriteHandle->serialManagerHandle;
\r
966 #if (defined(SERIAL_MANAGER_NON_BLOCKING_MODE) && (SERIAL_MANAGER_NON_BLOCKING_MODE > 0U))
\r
967 assert(SERIAL_MANAGER_WRITE_TAG == serialWriteHandle->tag);
\r
970 #if (defined(SERIAL_MANAGER_NON_BLOCKING_MODE) && (SERIAL_MANAGER_NON_BLOCKING_MODE > 0U))
\r
971 SerialManager_CancelWriting(writeHandle);
\r
974 handle->openedWriteHandleCount--;
\r
975 memset(writeHandle, 0, SERIAL_MANAGER_WRITE_HANDLE_SIZE);
\r
977 return kStatus_SerialManager_Success;
\r
980 serial_manager_status_t SerialManager_OpenReadHandle(serial_handle_t serialHandle, serial_read_handle_t readHandle)
\r
982 serial_manager_handle_t *handle;
\r
983 serial_manager_read_handle_t *serialReadHandle;
\r
985 assert(serialHandle);
\r
986 assert(readHandle);
\r
987 if (SERIAL_MANAGER_READ_HANDLE_SIZE < sizeof(serial_manager_read_handle_t))
\r
989 return kStatus_SerialManager_Error;
\r
991 handle = (serial_manager_handle_t *)serialHandle;
\r
992 serialReadHandle = (serial_manager_read_handle_t *)readHandle;
\r
994 if (handle->openedReadHandleHead)
\r
996 return kStatus_SerialManager_Busy;
\r
998 memset(readHandle, 0, SERIAL_MANAGER_READ_HANDLE_SIZE);
\r
1000 handle->openedReadHandleHead = serialReadHandle;
\r
1002 serialReadHandle->serialManagerHandle = handle;
\r
1003 #if (defined(SERIAL_MANAGER_NON_BLOCKING_MODE) && (SERIAL_MANAGER_NON_BLOCKING_MODE > 0U))
\r
1004 serialReadHandle->tag = SERIAL_MANAGER_READ_TAG;
\r
1007 return kStatus_SerialManager_Success;
\r
1010 serial_manager_status_t SerialManager_CloseReadHandle(serial_read_handle_t readHandle)
\r
1012 serial_manager_handle_t *handle;
\r
1013 serial_manager_read_handle_t *serialReadHandle;
\r
1015 assert(readHandle);
\r
1017 serialReadHandle = (serial_manager_read_handle_t *)readHandle;
\r
1018 handle = (serial_manager_handle_t *)serialReadHandle->serialManagerHandle;
\r
1021 #if (defined(SERIAL_MANAGER_NON_BLOCKING_MODE) && (SERIAL_MANAGER_NON_BLOCKING_MODE > 0U))
\r
1022 assert(SERIAL_MANAGER_READ_TAG == serialReadHandle->tag);
\r
1025 #if (defined(SERIAL_MANAGER_NON_BLOCKING_MODE) && (SERIAL_MANAGER_NON_BLOCKING_MODE > 0U))
\r
1026 SerialManager_CancelReading(readHandle);
\r
1029 handle->openedReadHandleHead = NULL;
\r
1030 memset(readHandle, 0, SERIAL_MANAGER_READ_HANDLE_SIZE);
\r
1032 return kStatus_SerialManager_Success;
\r
1035 serial_manager_status_t SerialManager_WriteBlocking(serial_write_handle_t writeHandle, uint8_t *buffer, uint32_t length)
\r
1037 #if (defined(SERIAL_MANAGER_NON_BLOCKING_MODE) && (SERIAL_MANAGER_NON_BLOCKING_MODE > 0U))
\r
1038 return SerialManager_Write(writeHandle, buffer, length, kSerialManager_TransmissionBlocking);
\r
1040 return SerialManager_Write(writeHandle, buffer, length);
\r
1044 serial_manager_status_t SerialManager_ReadBlocking(serial_read_handle_t readHandle, uint8_t *buffer, uint32_t length)
\r
1046 #if (defined(SERIAL_MANAGER_NON_BLOCKING_MODE) && (SERIAL_MANAGER_NON_BLOCKING_MODE > 0U))
\r
1047 return SerialManager_Read(readHandle, buffer, length, kSerialManager_TransmissionBlocking, NULL);
\r
1049 return SerialManager_Read(readHandle, buffer, length);
\r
1053 #if (defined(SERIAL_MANAGER_NON_BLOCKING_MODE) && (SERIAL_MANAGER_NON_BLOCKING_MODE > 0U))
\r
1054 serial_manager_status_t SerialManager_WriteNonBlocking(serial_write_handle_t writeHandle,
\r
1058 return SerialManager_Write(writeHandle, buffer, length, kSerialManager_TransmissionNonBlocking);
\r
1061 serial_manager_status_t SerialManager_ReadNonBlocking(serial_read_handle_t readHandle, uint8_t *buffer, uint32_t length)
\r
1063 return SerialManager_Read(readHandle, buffer, length, kSerialManager_TransmissionNonBlocking, NULL);
\r
1066 serial_manager_status_t SerialManager_CancelWriting(serial_write_handle_t writeHandle)
\r
1068 serial_manager_write_handle_t *serialWriteHandle;
\r
1070 uint8_t isNotUsed = 0;
\r
1072 assert(writeHandle);
\r
1074 serialWriteHandle = (serial_manager_write_handle_t *)writeHandle;
\r
1076 assert(serialWriteHandle->serialManagerHandle);
\r
1077 assert(SERIAL_MANAGER_WRITE_TAG == serialWriteHandle->tag);
\r
1079 if ((serialWriteHandle->transfer.buffer) &&
\r
1080 (kSerialManager_TransmissionBlocking == serialWriteHandle->transfer.mode))
\r
1082 return kStatus_SerialManager_Error;
\r
1085 primask = DisableGlobalIRQ();
\r
1086 if (serialWriteHandle !=
\r
1087 (serial_manager_write_handle_t *)LIST_GetHead(&serialWriteHandle->serialManagerHandle->runningWriteHandleHead))
\r
1089 LIST_RemoveElement(&serialWriteHandle->link);
\r
1092 EnableGlobalIRQ(primask);
\r
1096 serialWriteHandle->transfer.soFar = 0;
\r
1097 serialWriteHandle->transfer.status = kStatus_SerialManager_Canceled;
\r
1099 SerialManager_AddTail(&serialWriteHandle->serialManagerHandle->completedWriteHandleHead, serialWriteHandle);
\r
1100 #if defined(OSA_USED)
\r
1102 #if (defined(SERIAL_MANAGER_USE_COMMON_TASK) && (SERIAL_MANAGER_USE_COMMON_TASK > 0U))
\r
1103 serialWriteHandle->serialManagerHandle->commontaskMsg.callback = SerialManager_Task;
\r
1104 serialWriteHandle->serialManagerHandle->commontaskMsg.callbackParam = serialWriteHandle->serialManagerHandle;
\r
1105 COMMON_TASK_post_message(&serialWriteHandle->serialManagerHandle->commontaskMsg);
\r
1107 (void)OSA_EventSet((osa_event_handle_t)serialWriteHandle->serialManagerHandle->event, SERIAL_EVENT_DATA_SENT);
\r
1111 SerialManager_Task(serialWriteHandle->serialManagerHandle);
\r
1116 switch (serialWriteHandle->serialManagerHandle->type)
\r
1118 #if (defined(SERIAL_PORT_TYPE_UART) && (SERIAL_PORT_TYPE_UART > 0U))
\r
1119 case kSerialPort_Uart:
\r
1120 Serial_UartCancelWrite(
\r
1121 ((serial_handle_t)&serialWriteHandle->serialManagerHandle->lowLevelhandleBuffer[0]));
\r
1124 #if (defined(SERIAL_PORT_TYPE_USBCDC) && (SERIAL_PORT_TYPE_USBCDC > 0U))
\r
1125 case kSerialPort_UsbCdc:
\r
1126 Serial_UsbCdcCancelWrite(
\r
1127 ((serial_handle_t)&serialWriteHandle->serialManagerHandle->lowLevelhandleBuffer[0]));
\r
1130 #if (defined(SERIAL_PORT_TYPE_SWO) && (SERIAL_PORT_TYPE_SWO > 0U))
\r
1131 case kSerialPort_Swo:
\r
1132 Serial_SwoCancelWrite(
\r
1133 ((serial_handle_t)&serialWriteHandle->serialManagerHandle->lowLevelhandleBuffer[0]));
\r
1141 SerialManager_StartWriting(serialWriteHandle->serialManagerHandle);
\r
1143 return kStatus_SerialManager_Success;
\r
1146 serial_manager_status_t SerialManager_CancelReading(serial_read_handle_t readHandle)
\r
1148 serial_manager_read_handle_t *serialReadHandle;
\r
1149 serial_manager_callback_message_t msg;
\r
1153 assert(readHandle);
\r
1155 serialReadHandle = (serial_manager_read_handle_t *)readHandle;
\r
1157 assert(SERIAL_MANAGER_READ_TAG == serialReadHandle->tag);
\r
1159 if ((serialReadHandle->transfer.buffer) && (kSerialManager_TransmissionBlocking == serialReadHandle->transfer.mode))
\r
1161 return kStatus_SerialManager_Error;
\r
1164 primask = DisableGlobalIRQ();
\r
1165 buffer = serialReadHandle->transfer.buffer;
\r
1166 serialReadHandle->transfer.buffer = NULL;
\r
1167 serialReadHandle->transfer.length = 0;
\r
1168 msg.buffer = buffer;
\r
1169 msg.length = serialReadHandle->transfer.soFar;
\r
1170 EnableGlobalIRQ(primask);
\r
1174 if (serialReadHandle->callback)
\r
1176 serialReadHandle->callback(serialReadHandle->callbackParam, &msg, kStatus_SerialManager_Canceled);
\r
1179 return kStatus_SerialManager_Success;
\r
1182 serial_manager_status_t SerialManager_TryRead(serial_read_handle_t readHandle,
\r
1185 uint32_t *receivedLength)
\r
1187 assert(receivedLength);
\r
1189 return SerialManager_Read(readHandle, buffer, length, kSerialManager_TransmissionBlocking, receivedLength);
\r
1192 serial_manager_status_t SerialManager_InstallTxCallback(serial_write_handle_t writeHandle,
\r
1193 serial_manager_callback_t callback,
\r
1194 void *callbackParam)
\r
1196 serial_manager_write_handle_t *serialWriteHandle;
\r
1198 assert(writeHandle);
\r
1200 serialWriteHandle = (serial_manager_write_handle_t *)writeHandle;
\r
1202 assert(SERIAL_MANAGER_WRITE_TAG == serialWriteHandle->tag);
\r
1204 serialWriteHandle->callbackParam = callbackParam;
\r
1205 serialWriteHandle->callback = callback;
\r
1207 return kStatus_SerialManager_Success;
\r
1210 serial_manager_status_t SerialManager_InstallRxCallback(serial_read_handle_t readHandle,
\r
1211 serial_manager_callback_t callback,
\r
1212 void *callbackParam)
\r
1214 serial_manager_read_handle_t *serialReadHandle;
\r
1216 assert(readHandle);
\r
1218 serialReadHandle = (serial_manager_read_handle_t *)readHandle;
\r
1220 assert(SERIAL_MANAGER_READ_TAG == serialReadHandle->tag);
\r
1222 serialReadHandle->callbackParam = callbackParam;
\r
1223 serialReadHandle->callback = callback;
\r
1225 return kStatus_SerialManager_Success;
\r
1229 serial_manager_status_t SerialManager_EnterLowpower(serial_handle_t serialHandle)
\r
1231 assert(serialHandle);
\r
1233 return kStatus_SerialManager_Success;
\r
1236 serial_manager_status_t SerialManager_ExitLowpower(serial_handle_t serialHandle)
\r
1238 assert(serialHandle);
\r
1240 return kStatus_SerialManager_Success;
\r