dfu_with_st_tool_template.c 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177
  1. /*
  2. * Copyright (c) 2024, sakumisu
  3. *
  4. * SPDX-License-Identifier: Apache-2.0
  5. */
  6. #include "usbd_core.h"
  7. #include "usbd_dfu.h"
  8. #define USBD_VID 0x0483
  9. #define USBD_PID 0xDF11
  10. #define USBD_MAX_POWER 100
  11. #define USBD_LANGID_STRING 1033
  12. #define FLASH_DESC_STR "@Internal Flash /0x08000000/16*001Ka,112*01Kg"
  13. #define USB_CONFIG_SIZE (9 + 9 + 9)
  14. const uint8_t dfu_flash_descriptor[] = {
  15. USB_DEVICE_DESCRIPTOR_INIT(USB_2_0, 0x00, 0x00, 0x00, USBD_VID, USBD_PID, 0x0200, 0x01),
  16. USB_CONFIG_DESCRIPTOR_INIT(USB_CONFIG_SIZE, 0x01, 0x01, USB_CONFIG_BUS_POWERED, USBD_MAX_POWER),
  17. DFU_DESCRIPTOR_INIT(),
  18. ///////////////////////////////////////
  19. /// string0 descriptor
  20. ///////////////////////////////////////
  21. USB_LANGID_INIT(USBD_LANGID_STRING),
  22. ///////////////////////////////////////
  23. /// string1 descriptor
  24. ///////////////////////////////////////
  25. 0x14, /* bLength */
  26. USB_DESCRIPTOR_TYPE_STRING, /* bDescriptorType */
  27. 'C', 0x00, /* wcChar0 */
  28. 'h', 0x00, /* wcChar1 */
  29. 'e', 0x00, /* wcChar2 */
  30. 'r', 0x00, /* wcChar3 */
  31. 'r', 0x00, /* wcChar4 */
  32. 'y', 0x00, /* wcChar5 */
  33. 'U', 0x00, /* wcChar6 */
  34. 'S', 0x00, /* wcChar7 */
  35. 'B', 0x00, /* wcChar8 */
  36. ///////////////////////////////////////
  37. /// string2 descriptor
  38. ///////////////////////////////////////
  39. 0x1e, /* bLength */
  40. USB_DESCRIPTOR_TYPE_STRING, /* bDescriptorType */
  41. 'D', 0x00, /* wcChar0 */
  42. 'F', 0x00, /* wcChar1 */
  43. 'U', 0x00, /* wcChar2 */
  44. 'W', 0x00, /* wcChar3 */
  45. 'i', 0x00, /* wcChar4 */
  46. 't', 0x00, /* wcChar5 */
  47. 'h', 0x00, /* wcChar6 */
  48. 's', 0x00, /* wcChar7 */
  49. 't', 0x00, /* wcChar8 */
  50. ' ', 0x00, /* wcChar9 */
  51. 't', 0x00, /* wcChar10 */
  52. 'o', 0x00, /* wcChar11 */
  53. 'o', 0x00, /* wcChar12 */
  54. 'l', 0x00, /* wcChar13 */
  55. ///////////////////////////////////////
  56. /// string3 descriptor
  57. ///////////////////////////////////////
  58. 0x16, /* bLength */
  59. USB_DESCRIPTOR_TYPE_STRING, /* bDescriptorType */
  60. '2', 0x00, /* wcChar0 */
  61. '0', 0x00, /* wcChar1 */
  62. '2', 0x00, /* wcChar2 */
  63. '2', 0x00, /* wcChar3 */
  64. '1', 0x00, /* wcChar4 */
  65. '2', 0x00, /* wcChar5 */
  66. '3', 0x00, /* wcChar6 */
  67. '4', 0x00, /* wcChar7 */
  68. '5', 0x00, /* wcChar8 */
  69. '6', 0x00, /* wcChar9 */
  70. ///////////////////////////////////////
  71. /// string4 descriptor
  72. ///////////////////////////////////////
  73. 0x60, /* bLength */
  74. USB_DESCRIPTOR_TYPE_STRING, /* bDescriptorType */
  75. '@', 0x00, /* wcChar0 */
  76. 'I', 0x00, /* wcChar1 */
  77. 'n', 0x00, /* wcChar2 */
  78. 't', 0x00, /* wcChar3 */
  79. 'e', 0x00, /* wcChar4 */
  80. 'r', 0x00, /* wcChar5 */
  81. 'n', 0x00, /* wcChar6 */
  82. 'a', 0x00, /* wcChar7 */
  83. 'l', 0x00, /* wcChar8 */
  84. ' ', 0x00, /* wcChar9 */
  85. 'F', 0x00, /* wcChar10 */
  86. 'l', 0x00, /* wcChar11*/
  87. 'a', 0x00, /* wcChar12 */
  88. 's', 0x00, /* wcChar13 */
  89. 'h', 0x00, /* wcChar14 */
  90. ' ', 0x00, /* wcChar15 */
  91. ' ', 0x00, /* wcChar16 */
  92. ' ', 0x00, /* wcChar17 */
  93. '/', 0x00, /* wcChar18 */
  94. '0', 0x00, /* wcChar19 */
  95. 'x', 0x00, /* wcChar20 */
  96. '0', 0x00, /* wcChar21*/
  97. '8', 0x00, /* wcChar22 */
  98. '0', 0x00, /* wcChar23 */
  99. '0', 0x00, /* wcChar24 */
  100. '0', 0x00, /* wcChar25 */
  101. '0', 0x00, /* wcChar26 */
  102. '0', 0x00, /* wcChar27 */
  103. '0', 0x00, /* wcChar28 */
  104. '/', 0x00, /* wcChar29 */
  105. '1', 0x00, /* wcChar30 */
  106. '6', 0x00, /* wcChar31*/
  107. '*', 0x00, /* wcChar32 */
  108. '0', 0x00, /* wcChar33 */
  109. '0', 0x00, /* wcChar34 */
  110. '1', 0x00, /* wcChar35 */
  111. 'K', 0x00, /* wcChar36 */
  112. 'a', 0x00, /* wcChar37 */
  113. ',', 0x00, /* wcChar38 */
  114. '1', 0x00, /* wcChar39 */
  115. '1', 0x00, /* wcChar40 */
  116. '2', 0x00, /* wcChar41*/
  117. '*', 0x00, /* wcChar42 */
  118. '0', 0x00, /* wcChar43 */
  119. '1', 0x00, /* wcChar44 */
  120. 'K', 0x00, /* wcChar45 */
  121. 'g', 0x00, /* wcChar46 */
  122. #ifdef CONFIG_USB_HS
  123. ///////////////////////////////////////
  124. /// device qualifier descriptor
  125. ///////////////////////////////////////
  126. 0x0a,
  127. USB_DESCRIPTOR_TYPE_DEVICE_QUALIFIER,
  128. 0x00,
  129. 0x02,
  130. 0x00,
  131. 0x00,
  132. 0x00,
  133. 0x40,
  134. 0x00,
  135. 0x00,
  136. #endif
  137. 0x00
  138. };
  139. static void usbd_event_handler(uint8_t busid, uint8_t event)
  140. {
  141. switch (event) {
  142. case USBD_EVENT_RESET:
  143. break;
  144. case USBD_EVENT_CONNECTED:
  145. break;
  146. case USBD_EVENT_DISCONNECTED:
  147. break;
  148. case USBD_EVENT_RESUME:
  149. break;
  150. case USBD_EVENT_SUSPEND:
  151. break;
  152. case USBD_EVENT_CONFIGURED:
  153. break;
  154. case USBD_EVENT_SET_REMOTE_WAKEUP:
  155. break;
  156. case USBD_EVENT_CLR_REMOTE_WAKEUP:
  157. break;
  158. default:
  159. break;
  160. }
  161. }
  162. struct usbd_interface intf0;
  163. void dfu_flash_init(uint8_t busid, uintptr_t reg_base)
  164. {
  165. usbd_desc_register(busid, dfu_flash_descriptor);
  166. usbd_add_interface(busid, usbd_dfu_init_intf(&intf0));
  167. usbd_initialize(busid, reg_base, usbd_event_handler);
  168. }