Guest User

Untitled

a guest
Jul 29th, 2019
210
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.75 KB | None | 0 0
  1. diff --git a/soc/app/dcd_tntusb.c b/soc/app/dcd_tntusb.c
  2. index f91174e..3cb28d7 100644
  3. --- a/soc/app/dcd_tntusb.c
  4. +++ b/soc/app/dcd_tntusb.c
  5. @@ -22,7 +22,7 @@ static g_tntusb_t g_usb;
  6. static void _usb_data_write(unsigned int dst_ofs, const void *src, int len) {
  7. /* FIXME unaligned ofs */
  8. const uint32_t *src_u32 = src;
  9. - volatile uint32_t *dst_u32 = (volatile uint32_t *)((USB_CORE_OFFSET+USB_TXMEM) + dst_ofs);
  10. + volatile uint32_t *dst_u32 = (volatile uint32_t *)((USB_DATA_BASE) + dst_ofs);
  11.  
  12. len = (len + 3) >> 2;
  13. while (len--)
  14. @@ -31,7 +31,7 @@ static void _usb_data_write(unsigned int dst_ofs, const void *src, int len) {
  15.  
  16. static void _usb_data_read (void *dst, unsigned int src_ofs, int len) {
  17. /* FIXME unaligned ofs */
  18. - volatile uint32_t *src_u32 = (volatile uint32_t *)((USB_CORE_OFFSET+USB_RXMEM) + src_ofs);
  19. + volatile uint32_t *src_u32 = (volatile uint32_t *)((USB_DATA_BASE) + src_ofs);
  20. uint32_t *dst_u32 = dst;
  21.  
  22. int i = len >> 2;
  23. @@ -172,6 +172,8 @@ bool dcd_edpt_open (uint8_t rhport, tusb_desc_endpoint_t const * desc_edpt) {
  24. return true;
  25. }
  26.  
  27. +void *g_out_buffer[16];
  28. +
  29. bool dcd_edpt_xfer (uint8_t rhport, uint8_t ep_addr, uint8_t * buffer, uint16_t total_bytes) {
  30. (void) rhport;
  31.  
  32. @@ -180,7 +182,8 @@ bool dcd_edpt_xfer (uint8_t rhport, uint8_t ep_addr, uint8_t * buffer, uint16_t
  33. printf ("dcd_edpt_xfer: ep %d dir %s, len %d\n", epnum, (dir==TUSB_DIR_OUT)?"out":"in", total_bytes);
  34.  
  35. if (dir==TUSB_DIR_OUT) {
  36. - if (buffer) _usb_data_read(buffer, tntusb_ep_regs[epnum].out.bd[0].ptr, total_bytes);
  37. + if (buffer)
  38. + g_out_buffer[epnum] = buffer;
  39. tntusb_ep_regs[epnum].out.bd[0].csr = TNTUSB_BD_STATE_RDY_DATA | TNTUSB_BD_LEN(g_usb.ep_mps[epnum]);
  40. } else {
  41. if (buffer) _usb_data_write(tntusb_ep_regs[epnum].in.bd[0].ptr, buffer, total_bytes);
  42. @@ -255,13 +258,16 @@ void usb_poll(void) {
  43. uint32_t in_csr=tntusb_ep_regs[ep].in.bd[0].csr;
  44. if ((in_csr & TNTUSB_BD_STATE_MSK) == TNTUSB_BD_STATE_DONE_OK) {
  45. printf("IN xfer done on ep %d: %d bytes\n", ep, g_usb.ep_in_xfer_len[ep]);
  46. - tntusb_ep_regs[ep].in.bd[0].csr=0;
  47. + tntusb_ep_regs[ep].in.bd[0].csr = 0;
  48. dcd_event_xfer_complete(0, ep, g_usb.ep_in_xfer_len[ep], XFER_RESULT_SUCCESS, true);
  49. }
  50. uint32_t out_csr=tntusb_ep_regs[ep].out.bd[0].csr;
  51. if ((out_csr & TNTUSB_BD_STATE_MSK) == TNTUSB_BD_STATE_DONE_OK) {
  52. - printf("OUT xfer done on ep %d: %d bytes\n", ep, out_csr & TNTUSB_BD_LEN_MSK);
  53. - dcd_event_xfer_complete(0, ep, out_csr & TNTUSB_BD_LEN_MSK, XFER_RESULT_SUCCESS, true);
  54. + int len = (out_csr & TNTUSB_BD_LEN_MSK) - 2;
  55. + tntusb_ep_regs[ep].out.bd[0].csr = 0;
  56. + printf("OUT xfer done on ep %d: %d bytes\n", ep, len);
  57. + _usb_data_read(g_out_buffer[ep], tntusb_ep_regs[ep].out.bd[0].ptr, len);
  58. + dcd_event_xfer_complete(0, ep, len, XFER_RESULT_SUCCESS, true);
  59. }
  60. }
  61. }
Advertisement
Add Comment
Please, Sign In to add comment