USB update
authorNIIBE Yutaka <gniibe@fsij.org>
Wed, 15 Jul 2015 07:51:31 +0000 (16:51 +0900)
committerNIIBE Yutaka <gniibe@fsij.org>
Wed, 15 Jul 2015 07:51:31 +0000 (16:51 +0900)
ChangeLog
NEWS
src/main.c
src/usb_lld.h
src/usb_stm32f103.c

index 85e1d53..de22dc9 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,9 @@
 2015-07-15  Niibe Yutaka  <gniibe@fsij.org>
 
+       * src/usb_lld.h: Update from Gnuk.
+       * src/usb_stm32f103.c: Likewise.
+       * src/main.c (usb_cb_get_descriptor): Follow the change.
+
        * chopstx: Update to 0.07.
        * src/sys.c: Update to 2.1 from chopstx.
        * src/sys.h: Likewise.
diff --git a/NEWS b/NEWS
index 48fa326..d536c9a 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -2,13 +2,13 @@ NeuG NEWS - User visible changes
 
 * Major changes in NeuG 1.0.2
 
-  Released 2015-09-XX, by NIIBE Yutaka
+  Released 2015-07-17, by NIIBE Yutaka
 
 ** Upgrade of firmware enhancement
 The process is protected by password.
 
 ** Upgrade of Chopstx
-We use Chopstx 0.06, which supports STM32 Primer2, CQ STARM.
+We use Chopstx 0.07, which supports STM32 Primer2, CQ STARM.
 
 
 * Major changes in NeuG 1.0.1
index 975a218..9b90fa5 100644 (file)
@@ -492,8 +492,9 @@ usb_cb_setup (uint8_t req, uint8_t req_no,
 
 int
 usb_cb_get_descriptor (uint8_t rcp, uint8_t desc_type, uint8_t desc_index,
-                      uint16_t index)
+                      uint16_t index, uint16_t length)
 {
+  (void)length;
 #ifdef FRAUCHEKY_SUPPORT
   if (!running_neug)
     return fraucheky_get_descriptor (rcp, desc_type, desc_index, index);
index 2c7a931..dfaedb7 100644 (file)
@@ -61,7 +61,7 @@ void usb_cb_ctrl_write_finish (uint8_t req, uint8_t req_no,
 int usb_cb_setup (uint8_t req, uint8_t req_no, uint16_t value,
                  uint16_t index, uint16_t len);
 int usb_cb_get_descriptor (uint8_t rcp, uint8_t desc_type, uint8_t desc_index,
-                          uint16_t index);
+                          uint16_t index, uint16_t length);
 int usb_cb_handle_event (uint8_t event_type, uint16_t value);
 int usb_cb_interface (uint8_t cmd, uint16_t interface, uint16_t value);
 
@@ -90,50 +90,33 @@ enum DEVICE_STATE
 };
 
 
-extern void usb_lld_init (uint8_t feature);
-
-extern void usb_lld_to_pmabuf (const void *src, uint16_t addr, size_t n);
-
-extern void usb_lld_from_pmabuf (void *dst, uint16_t addr, size_t n);
-
-extern void usb_lld_stall_tx (int ep_num);
-
-extern void usb_lld_stall_rx (int ep_num);
-
-extern int usb_lld_tx_data_len (int ep_num);
-
-extern void usb_lld_txcpy (const void *src, int ep_num, int offset, size_t len);
-
-extern void usb_lld_tx_enable (int ep_num, size_t len);
-
-extern void usb_lld_write (uint8_t ep_num, const void *buf, size_t len);
-
-extern void usb_lld_rx_enable (int ep_num);
-
-extern int usb_lld_rx_data_len (int ep_num);
-
-extern void usb_lld_rxcpy (uint8_t *dst, int ep_num, int offset, size_t len);
-
-extern void usb_lld_reset (void);
-
-extern void usb_lld_setup_endpoint (int ep_num, int ep_type, int ep_kind,
-                                   int ep_rx_addr, int ep_tx_addr,
-                                   int ep_rx_memory_size);
-
-extern void usb_lld_set_configuration (uint8_t config);
-
-extern uint8_t usb_lld_current_configuration (void);
-
-extern void usb_lld_set_feature (uint8_t feature);
-
-extern void usb_lld_set_data_to_send (const void *p, size_t len);
+void usb_lld_init (uint8_t feature);
+void usb_lld_to_pmabuf (const void *src, uint16_t addr, size_t n);
+void usb_lld_from_pmabuf (void *dst, uint16_t addr, size_t n);
+void usb_lld_stall_tx (int ep_num);
+void usb_lld_stall_rx (int ep_num);
+int usb_lld_tx_data_len (int ep_num);
+void usb_lld_txcpy (const void *src, int ep_num, int offset, size_t len);
+void usb_lld_tx_enable (int ep_num, size_t len);
+void usb_lld_write (uint8_t ep_num, const void *buf, size_t len);
+void usb_lld_rx_enable (int ep_num);
+int usb_lld_rx_data_len (int ep_num);
+void usb_lld_rxcpy (uint8_t *dst, int ep_num, int offset, size_t len);
+void usb_lld_reset (void);
+void usb_lld_setup_endpoint (int ep_num, int ep_type, int ep_kind,
+                            int ep_rx_addr, int ep_tx_addr,
+                            int ep_rx_memory_size);
+void usb_lld_set_configuration (uint8_t config);
+uint8_t usb_lld_current_configuration (void);
+void usb_lld_set_feature (uint8_t feature);
+void usb_lld_set_data_to_send (const void *p, size_t len);
 
 extern inline void usb_lld_set_data_to_recv (void *p, size_t len)
 {
   usb_lld_set_data_to_send ((const void *)p, len);
 }
 
-extern void usb_lld_prepare_shutdown (void);
-extern void usb_lld_shutdown (void);
+void usb_lld_prepare_shutdown (void);
+void usb_lld_shutdown (void);
 
-extern void usb_interrupt_handler (void);
+void usb_interrupt_handler (void);
index 2c946eb..a624e9b 100644 (file)
@@ -698,7 +698,8 @@ static int std_get_descriptor (uint8_t req, uint16_t value,
     return USB_UNSUPPORT;
 
   (void)length;
-  return usb_cb_get_descriptor (rcp, (value >> 8), (value & 0xff), index);
+  return usb_cb_get_descriptor (rcp, (value >> 8), (value & 0xff),
+                               index, length);
 }
 
 static int std_get_configuration (uint8_t req, uint16_t value,
@@ -851,13 +852,22 @@ static void handle_setup0 (void)
          if (data_p->len > len)
            data_p->len = len;
 
-         if ((data_p->len % USB_MAX_PACKET_SIZE) == 0)
+         if (data_p->len != 0 && (data_p->len % USB_MAX_PACKET_SIZE) == 0)
            data_p->require_zlp = TRUE;
          else
            data_p->require_zlp = FALSE;
 
-         dev_p->state = IN_DATA;
-         handle_datastage_in ();
+         if (data_p->addr == NULL)
+           {
+             /* usb_lld_wite was called already by the setup callback.  */
+             dev_p->state = LAST_IN_DATA;
+             data_p->len = 0;
+           }
+         else
+           {
+             dev_p->state = IN_DATA;
+             handle_datastage_in ();
+           }
        }
       else if (ctrl_p->wLength == 0)
        {