@ -417,15 +417,28 @@ STATIC mp_obj_t machine_uart_sendbreak(mp_obj_t self_in) {
}
STATIC MP_DEFINE_CONST_FUN_OBJ_1 ( machine_uart_sendbreak_obj , machine_uart_sendbreak ) ;
STATIC mp_obj_t machine_uart_txdone ( mp_obj_t self_in ) {
machine_uart_obj_t * self = MP_OBJ_TO_PTR ( self_in ) ;
if ( uart_wait_tx_done ( self - > uart_num , 0 ) = = ESP_OK ) {
return mp_const_true ;
} else {
return mp_const_false ;
}
}
STATIC MP_DEFINE_CONST_FUN_OBJ_1 ( machine_uart_txdone_obj , machine_uart_txdone ) ;
STATIC const mp_rom_map_elem_t machine_uart_locals_dict_table [ ] = {
{ MP_ROM_QSTR ( MP_QSTR_init ) , MP_ROM_PTR ( & machine_uart_init_obj ) } ,
{ MP_ROM_QSTR ( MP_QSTR_deinit ) , MP_ROM_PTR ( & machine_uart_deinit_obj ) } ,
{ MP_ROM_QSTR ( MP_QSTR_any ) , MP_ROM_PTR ( & machine_uart_any_obj ) } ,
{ MP_ROM_QSTR ( MP_QSTR_flush ) , MP_ROM_PTR ( & mp_stream_flush_obj ) } ,
{ MP_ROM_QSTR ( MP_QSTR_read ) , MP_ROM_PTR ( & mp_stream_read_obj ) } ,
{ MP_ROM_QSTR ( MP_QSTR_readline ) , MP_ROM_PTR ( & mp_stream_unbuffered_readline_obj ) } ,
{ MP_ROM_QSTR ( MP_QSTR_readinto ) , MP_ROM_PTR ( & mp_stream_readinto_obj ) } ,
{ MP_ROM_QSTR ( MP_QSTR_write ) , MP_ROM_PTR ( & mp_stream_write_obj ) } ,
{ MP_ROM_QSTR ( MP_QSTR_sendbreak ) , MP_ROM_PTR ( & machine_uart_sendbreak_obj ) } ,
{ MP_ROM_QSTR ( MP_QSTR_txdone ) , MP_ROM_PTR ( & machine_uart_txdone_obj ) } ,
{ MP_ROM_QSTR ( MP_QSTR_INV_TX ) , MP_ROM_INT ( UART_INV_TX ) } ,
{ MP_ROM_QSTR ( MP_QSTR_INV_RX ) , MP_ROM_INT ( UART_INV_RX ) } ,
@ -491,6 +504,18 @@ STATIC mp_uint_t machine_uart_ioctl(mp_obj_t self_in, mp_uint_t request, uintptr
if ( ( flags & MP_STREAM_POLL_WR ) & & 1 ) { // FIXME: uart_tx_any_room(self->uart_num)
ret | = MP_STREAM_POLL_WR ;
}
} else if ( request = = MP_STREAM_FLUSH ) {
// The timeout is estimated using the buffer size and the baudrate.
// Take the worst case assumptions at 13 bit symbol size times 2.
uint32_t baudrate ;
uart_get_baudrate ( self - > uart_num , & baudrate ) ;
uint32_t timeout = ( 3 + self - > txbuf ) * 13000 * 2 / baudrate ;
if ( uart_wait_tx_done ( self - > uart_num , timeout ) = = ESP_OK ) {
ret = 0 ;
} else {
* errcode = MP_ETIMEDOUT ;
ret = MP_STREAM_ERROR ;
}
} else {
* errcode = MP_EINVAL ;
ret = MP_STREAM_ERROR ;