]> mj.ucw.cz Git - home-hw.git/commitdiff
Request/reply protocol
authorMartin Mares <mj@ucw.cz>
Tue, 26 Jun 2018 14:07:55 +0000 (16:07 +0200)
committerMartin Mares <mj@ucw.cz>
Tue, 26 Jun 2018 14:07:55 +0000 (16:07 +0200)
Inc/app.h
Src/main.c
Src/usbdev.c
host/test.c

index d975287ef502c59fb2fba75fcaba135a79be3695..1fb9965a7bc461b2d7e13b6fb01944f9313bb513 100644 (file)
--- 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);
index bb225b2362046e2cdaf17476e555569404db85cf..e77264bd3e58ad62ed54c3917417cb5fc73155f1 100644 (file)
@@ -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);
index 9713bc8093f9452b01da53131e7ef3ddde60a321..4834592fbfd1b5c3c8b2897fa2978fef6bf5987c 100644 (file)
@@ -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;
 }
index 07b804e4d3a0fb2f274cec710ad2fa7396ff78fb..ce9185196e03dc042970d626df880d96416ed88e 100644 (file)
@@ -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);
     }