/// \method any() /// Return `True` if any characters waiting, else `False`. STATIC mp_obj_t pyb_usb_vcp_any(mp_obj_t self_in) { if (USBD_CDC_RxNum() > 0) { return mp_const_true; } else { return mp_const_false; } }
int USBD_CDC_RxGet(void) { // wait for buffer to have at least 1 character in it while (USBD_CDC_RxNum() == 0) { __WFI(); } // get next character int c = UserRxBuffer[UserRxBufCur++]; return c; }
STATIC mp_uint_t pyb_usb_vcp_ioctl(mp_obj_t self_in, mp_uint_t request, int *errcode, ...) { va_list vargs; va_start(vargs, errcode); mp_uint_t ret; if (request == MP_IOCTL_POLL) { mp_uint_t flags = va_arg(vargs, mp_uint_t); ret = 0; if ((flags & MP_IOCTL_POLL_RD) && USBD_CDC_RxNum() > 0) { ret |= MP_IOCTL_POLL_RD; } if ((flags & MP_IOCTL_POLL_WR) && USBD_CDC_TxHalfEmpty()) { ret |= MP_IOCTL_POLL_WR; } } else { *errcode = EINVAL; ret = MP_STREAM_ERROR; } va_end(vargs); return ret; }
int usb_vcp_rx_num(void) { return USBD_CDC_RxNum(); }