예제 #1
0
int_fast8_t
usb_send_bulk_in(void *data, uint_fast8_t len)
{
    UENUM = USB_CDC_EP_BULK_IN;
    if (!(UEINTX & (1<<TXINI))) {
        // Buffer full
        UEIENX = 1<<TXINE;
        return -1;
    }
    usb_write_packet(data, len);
    UEINTX = (uint8_t)~((1<<FIFOCON) | (1<<TXINI) | (1<<RXOUTI));
    return len;
}
예제 #2
0
static int8_t
_usb_send_ep0(const void *data, uint8_t len, uint8_t progmem)
{
    UENUM = 0;
    uint8_t ueintx = UEINTX;
    if (ueintx & ((1<<RXSTPI) | (1<<RXOUTI)))
        return -2;
    if (!(ueintx & (1<<TXINI))) {
        // Not ready to send
        UEIENX = (1<<RXSTPE) | (1<<RXOUTE) | (1<<TXINE);
        return -1;
    }
    if (progmem)
        usb_write_packet_progmem(data, len);
    else
        usb_write_packet(data, len);
    UEINTX = ~(1<<TXINI);
    return len;
}
예제 #3
0
파일: usbserial.c 프로젝트: N7QWT/klipper
int_fast8_t
usb_send_setup(const void *data, uint_fast8_t len)
{
    return usb_write_packet(0, 1, data, len);
}
예제 #4
0
파일: usbserial.c 프로젝트: N7QWT/klipper
int_fast8_t
usb_send_bulk_in(void *data, uint_fast8_t len)
{
    return usb_write_packet(USB_CDC_EP_BULK_IN, 1, data, len);
}