// main.c
-extern byte rx_display[8];
-extern volatile byte rx_display_ready;
-
// display.c
void display_init(void);
void display_counter(uint cnt);
void display_buffer(byte *buf);
+
+// usbdev.c
+
+extern byte rx_packet[64];
+extern byte tx_packet[64];
+extern volatile byte rx_packet_state, tx_packet_state;
+
+void tx_packet_send(void);
/* USER CODE END PFP */
/* USER CODE BEGIN 0 */
-byte rx_display[8];
-volatile byte rx_display_ready;
/* USER CODE END 0 */
/* USER CODE BEGIN WHILE */
while (1)
{
- __disable_irq();
- if (rx_display_ready)
+ if (rx_packet_state == 1 && !tx_packet_state)
{
- byte rx[8];
- rx_display_ready = 0;
- memcpy(rx, rx_display, 8);
- __enable_irq();
- display_buffer(rx);
+ display_buffer(rx_packet);
+ tx_packet_state = 1;
+ usb_ep_send(&usb, 0x82, tx_packet, 8);
+ rx_packet_state = 0;
+ usb_ep_receive(&usb, 0x01, rx_packet, 64);
}
- else
- __enable_irq();
// debug_printf("Counter = %d\n", cnt);
// display_counter(cnt);
/*** 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)
{
{
usb_ep_open(usb, 0x01, USB_EP_TYPE_BULK, 64);
usb_ep_open(usb, 0x82, USB_EP_TYPE_BULK, 64);
- usb_ep_receive(usb, 0x01, usb_rx_buf, 64);
+ usb_ep_receive(usb, 0x01, rx_packet, 64);
}
void usb_dev_unconfigure(struct usb *usb)
{
if (epnum == 0x01)
{
- // usb_tx_buf[0]++;
- // usb_ep_send(usb, 0x82, usb_tx_buf, 33);
-
u32 len = usb_ep_received_size(usb, 0x01);
- if (len >= 8)
- {
- memcpy(rx_display, usb_rx_buf, 8);
- rx_display_ready = 1;
- }
-
- usb_ep_receive(usb, 0x01, usb_rx_buf, 64);
+ 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;
}
}
printf("Transferred %d bytes\n", transferred);
-#if 0
- unsigned char resp[1000];
+ unsigned char resp[64];
int received;
- if (err = libusb_bulk_transfer(devh, 0x82, resp, 1000, &received, 2000))
+ if (err = libusb_bulk_transfer(devh, 0x82, resp, 64, &received, 2000))
{
fprintf(stderr, "Receive failed: error %d\n", err);
exit(1);
}
printf("Received %d bytes [%02x]\n", received, resp[0]);
-#endif
sleep(1);
}