From 9c15daf7606d9a8ae58736963c8130cf7f4333ea Mon Sep 17 00:00:00 2001 From: Martin Mares Date: Tue, 26 Jun 2018 16:07:55 +0200 Subject: [PATCH] Request/reply protocol --- Inc/app.h | 11 ++++++++--- Src/main.c | 17 ++++++----------- Src/usbdev.c | 23 +++++++++-------------- host/test.c | 6 ++---- 4 files changed, 25 insertions(+), 32 deletions(-) diff --git a/Inc/app.h b/Inc/app.h index d975287..1fb9965 100644 --- a/Inc/app.h +++ b/Inc/app.h @@ -1,10 +1,15 @@ // 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); diff --git a/Src/main.c b/Src/main.c index bb225b2..e77264b 100644 --- a/Src/main.c +++ b/Src/main.c @@ -73,8 +73,6 @@ static void MX_TIM4_Init(void); /* USER CODE END PFP */ /* USER CODE BEGIN 0 */ -byte rx_display[8]; -volatile byte rx_display_ready; /* USER CODE END 0 */ @@ -143,17 +141,14 @@ int main(void) /* 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); diff --git a/Src/usbdev.c b/Src/usbdev.c index 9713bc8..4834592 100644 --- a/Src/usbdev.c +++ b/Src/usbdev.c @@ -91,8 +91,9 @@ static const byte desc_languages[] = { /*** 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) { @@ -110,7 +111,7 @@ void usb_dev_configure(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) @@ -136,21 +137,15 @@ void usb_dev_recv_done(struct usb *usb, byte epnum) { 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; } diff --git a/host/test.c b/host/test.c index 07b804e..ce91851 100644 --- a/host/test.c +++ b/host/test.c @@ -81,16 +81,14 @@ int main(void) } 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); } -- 2.39.2