OSStatus MicoUartSend( mico_uart_t uart, const void* data, uint32_t size ) { if(uart_mapping[uart].uart == FUART){ #ifndef NO_MICO_RTOS mico_rtos_lock_mutex(&uart_interfaces[uart].tx_mutex); #endif FuartSend( (uint8_t *)data, size); #ifndef NO_MICO_RTOS mico_rtos_unlock_mutex(&uart_interfaces[uart].tx_mutex); #endif return kNoErr; }else if(uart_mapping[uart].uart == BUART){ #ifndef NO_MICO_RTOS mico_rtos_lock_mutex(&uart_interfaces[uart].tx_mutex); #endif BuartSend( (uint8_t *)data, size); }else { return kUnsupportedErr; } #ifndef NO_MICO_RTOS mico_rtos_get_semaphore( &uart_interfaces[ uart ].tx_complete, MICO_NEVER_TIMEOUT ); mico_rtos_unlock_mutex(&uart_interfaces[uart].tx_mutex); #else while(uart_interfaces[ uart ].tx_complete == false); uart_interfaces[ uart ].tx_complete = false; #endif return kNoErr; }
OSStatus platform_uart_transmit_bytes( platform_uart_driver_t* driver, const uint8_t* data_out, uint32_t size ) { if(driver->peripheral->uart == FUART){ #ifndef NO_MICO_RTOS mico_rtos_lock_mutex(&driver->tx_mutex); #endif FuartSend( (uint8_t *)data_out, size); #ifndef NO_MICO_RTOS mico_rtos_unlock_mutex(&driver->tx_mutex); #endif return kNoErr; }else if(driver->peripheral->uart == BUART){ #ifndef NO_MICO_RTOS mico_rtos_lock_mutex(&driver->tx_mutex); #endif BuartSend( (uint8_t *)data_out, size); }else { return kUnsupportedErr; } #ifndef NO_MICO_RTOS mico_rtos_get_semaphore( &driver->tx_complete, MICO_NEVER_TIMEOUT ); mico_rtos_unlock_mutex( &driver->tx_mutex ); #else while( driver->tx_complete == false ); driver->tx_complete = false; #endif return kNoErr; }