Exemple #1
0
/// \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;
}
Exemple #3
0
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;
}
Exemple #4
0
int usb_vcp_rx_num(void) {
    return USBD_CDC_RxNum();
}