#include "util.h"
#include "usb.h"
+#include "app.h"
+
+#include <string.h>
/*** Descriptors ***/
// End-point descriptor
7, // bLength
USB_DESC_TYPE_ENDPOINT, // bDescriptorType
- 0x81, // bEndpointAddress
+ 0x82, // bEndpointAddress
USB_EP_TYPE_BULK, // bmAttributes
0x40, 0x00, // wMaxPacketSize
0x00, // bInterval: unused
/*** Callbacks ***/
-static byte usb_rx_buf[64];
-static byte usb_tx_buf[64];
+byte rx_packet[64];
+byte tx_packet[64];
+volatile byte rx_packet_state, tx_packet_state;
void usb_dev_reset(struct usb *usb)
{
void usb_dev_configure(struct usb *usb)
{
usb_ep_open(usb, 0x01, USB_EP_TYPE_BULK, 64);
- usb_ep_open(usb, 0x81, USB_EP_TYPE_BULK, 64);
- usb_ep_receive(usb, 0x01, usb_rx_buf, 64);
+ usb_ep_open(usb, 0x82, USB_EP_TYPE_BULK, 64);
+ usb_ep_receive(usb, 0x01, rx_packet, 64);
}
void usb_dev_unconfigure(struct usb *usb)
{
usb_ep_close(usb, 0x01);
- usb_ep_close(usb, 0x81);
+ usb_ep_close(usb, 0x82);
}
bool usb_dev_setup_hook(struct usb *usb, struct setup_request *setup)
{
if (epnum == 0x01)
{
- usb_tx_buf[0]++;
- usb_ep_send(usb, 0x81, usb_tx_buf, 33);
+ u32 len = usb_ep_received_size(usb, 0x01);
+ if (len >= 8 && !rx_packet_state)
+ rx_packet_state = 1;
+ else
+ usb_ep_receive(usb, 0x01, rx_packet, 64);
}
}
void usb_dev_send_done(struct usb *usb, byte epnum)
{
- usb_ep_receive(usb, 0x01, usb_rx_buf, 64);
+ tx_packet_state = 0;
}