+ udi_cb_t *gcb = UDI_GCB(cb);
+ rdata_t *rdata = gcb->context;
+ if( cb->op == UDI_GIO_OP_READ && status == UDI_STAT_DATA_UNDERRUN )
+ {
+ udi_size_t len = cb->data_buf->buf_size;
+ if( len == 0 )
+ {
+ udi_debug_printf("%s: no data read, rx buffer must be empty\n", __func__, len);
+ ASSERT(status != UDI_OK);
+ }
+ else
+ {
+ char tmp[len];
+ udi_buf_read(cb->data_buf, 0, len, tmp);
+ for( int i = 0; i < len; i ++ ) {
+ if( tmp[i] == '\r' )
+ tmp[i] = '\n';
+ }
+
+ udi_debug_printf("%s: %i bytes '%.*s'\n", __func__, len, len, tmp);
+ PTY_SendInput(rdata->PTYInstance, tmp, len);
+ }
+
+ udi_buf_free(cb->data_buf);
+
+ // if status == OK, then all bytes we requested were read.
+ // - In which case, we want to request more
+ if( status == UDI_OK ) {
+ UDI_BUF_ALLOC(acessuart_event_ind__buf_allocated, gcb, NULL, RX_SIZE, UDI_NULL_BUF_PATH);
+ return ;
+ }
+
+ Workqueue_AddWork(&rdata->CBWorkQueue, cb);
+ }
+ else {
+ UNIMPLEMENTED();
+ }