SemaphoreP_Handle callbackSem = NULL; /* * ======== UART callback test ======== * * The test function tests the read/write in callback mode */ static bool UART_test_callback(bool dmaMode) { char rx_buf[32]; const char message_to_send_by_uart[EXPECTED_MSG_LENGTH] = "message to send by uart!\n"; bool ret = false; /* Create call back semaphore */ SemaphoreP_Params semParams; UART_osalSemParamsInit(&semParams); semParams.mode = SemaphoreP_Mode_BINARY; callbackSem = UART_osalCreateBlockingLock(0, &semParams); /* Test read/write API's in callback mode */ /* UART SoC init configuration */ /* Get the default UART init configurations */ UART_HwAttrs uart_cfg; UART_socGetInitCfg(uartTestInstance, &uart_cfg); uart_cfg.edmaHandle = NULL; uart_cfg.dmaMode = FALSE; uart_cfg.loopback = FALSE; /* Set the DMA enabled UART init configurations */ UART_socSetInitCfg(uartTestInstance, &uart_cfg); /* Set callback mode for both read and write */ UART_Params uartParams; UART_Params_init(&uartParams); uartParams.readCallback = UART_callback; uartParams.readMode = UART_MODE_CALLBACK; uartParams.parityType = uartParity; UART_Handle uart = UART_open(uartTestInstance, &uartParams); if (uart == NULL) { goto Err; } memset(rx_buf, 0, 32); if (UART_read(uart, (void *)&rx_buf[0], 32) == UART_ERROR) { goto Err; } if (UART_write(uart, (void *)&message_to_send_by_uart[0], sizeof(message_to_send_by_uart)) == UART_ERROR) { goto Err; } if (UART_osalPendLock(callbackSem, uartParams.writeTimeout) != SemaphoreP_OK)-> stop here unless I input on serial port. UART_write doesn't trigger callback function { goto Err; } ret = true; Err: if (uart) { UART_close(uart); } if (callbackSem) { UART_osalDeleteBlockingLock(callbackSem); callbackSem = NULL; } return (ret); }