usbdev_trprintf.c 9.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291
  1. /****************************************************************************
  2. * drivers/usbdev/usbdev_trprintf.c
  3. *
  4. * Copyright (C) 2008-2010, 2012-2013 Gregory Nutt. All rights reserved.
  5. * Author: Gregory Nutt <gnutt@nuttx.org>
  6. *
  7. * Redistribution and use in source and binary forms, with or without
  8. * modification, are permitted provided that the following conditions
  9. * are met:
  10. *
  11. * 1. Redistributions of source code must retain the above copyright
  12. * notice, this list of conditions and the following disclaimer.
  13. * 2. Redistributions in binary form must reproduce the above copyright
  14. * notice, this list of conditions and the following disclaimer in
  15. * the documentation and/or other materials provided with the
  16. * distribution.
  17. * 3. Neither the name NuttX nor the names of its contributors may be
  18. * used to endorse or promote products derived from this software
  19. * without specific prior written permission.
  20. *
  21. * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  22. * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
  23. * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
  24. * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
  25. * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
  26. * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
  27. * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
  28. * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
  29. * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  30. * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
  31. * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
  32. * POSSIBILITY OF SUCH DAMAGE.
  33. *
  34. ****************************************************************************/
  35. /****************************************************************************
  36. * Included Files
  37. ****************************************************************************/
  38. #include <nuttx/config.h>
  39. #include <sys/types.h>
  40. #include <stdint.h>
  41. #include <debug.h>
  42. #include <nuttx/usb/usbdev_trace.h>
  43. /****************************************************************************
  44. * Definitions
  45. ****************************************************************************/
  46. /****************************************************************************
  47. * Private Types
  48. ****************************************************************************/
  49. /****************************************************************************
  50. * Private Function Prototypes
  51. ****************************************************************************/
  52. /****************************************************************************
  53. * Private Data
  54. ****************************************************************************/
  55. /****************************************************************************
  56. * Private Functions
  57. ****************************************************************************/
  58. /*******************************************************************************
  59. * Name: get_string
  60. *
  61. * Description:
  62. * Search the driver string data to find the string matching the provided ID.
  63. *
  64. *******************************************************************************/
  65. #ifdef CONFIG_USBDEV_TRACE_STRINGS
  66. static FAR const char *get_string(FAR const struct trace_msg_t *array, int id)
  67. {
  68. FAR const struct trace_msg_t *p = array;
  69. while (p->str != NULL)
  70. {
  71. if (p->id == id)
  72. {
  73. return p->str;
  74. }
  75. p++;
  76. }
  77. return "???";
  78. }
  79. #endif
  80. /****************************************************************************
  81. * Public Functions
  82. ****************************************************************************/
  83. /*******************************************************************************
  84. * Name: usbtrace_trprintf
  85. *
  86. * Description:
  87. * Print the trace record using the supplied printing function
  88. *
  89. *******************************************************************************/
  90. void usbtrace_trprintf(trprintf_t trprintf, uint16_t event, uint16_t value)
  91. {
  92. switch (event)
  93. {
  94. case TRACE_DEVINIT:
  95. trprintf("USB controller initialization: %04x\n", value);
  96. break;
  97. case TRACE_DEVUNINIT:
  98. trprintf("USB controller un-initialization: %04x\n", value);
  99. break;
  100. case TRACE_DEVREGISTER:
  101. trprintf("usbdev_register(): %04x\n", value);
  102. break;
  103. case TRACE_DEVUNREGISTER:
  104. trprintf("usbdev_unregister(): %04x\n", value);
  105. break;
  106. case TRACE_EPCONFIGURE:
  107. trprintf("Endpoint configure(): %04x\n", value);
  108. break;
  109. case TRACE_EPDISABLE:
  110. trprintf("Endpoint disable(): %04x\n", value);
  111. break;
  112. case TRACE_EPALLOCREQ:
  113. trprintf("Endpoint allocreq(): %04x\n", value);
  114. break;
  115. case TRACE_EPFREEREQ:
  116. trprintf("Endpoint freereq(): %04x\n", value);
  117. break;
  118. case TRACE_EPALLOCBUFFER:
  119. trprintf("Endpoint allocbuffer(): %04x\n", value);
  120. break;
  121. case TRACE_EPFREEBUFFER:
  122. trprintf("Endpoint freebuffer(): %04x\n", value);
  123. break;
  124. case TRACE_EPSUBMIT:
  125. trprintf("Endpoint submit(): %04x\n", value);
  126. break;
  127. case TRACE_EPCANCEL:
  128. trprintf("Endpoint cancel(): %04x\n", value);
  129. break;
  130. case TRACE_EPSTALL:
  131. trprintf("Endpoint stall(true): %04x\n", value);
  132. break;
  133. case TRACE_EPRESUME:
  134. trprintf("Endpoint stall(false): %04x\n", value);
  135. break;
  136. case TRACE_DEVALLOCEP:
  137. trprintf("Device allocep(): %04x\n", value);
  138. break;
  139. case TRACE_DEVFREEEP:
  140. trprintf("Device freeep(): %04x\n", value);
  141. break;
  142. case TRACE_DEVGETFRAME:
  143. trprintf("Device getframe(): %04x\n", value);
  144. break;
  145. case TRACE_DEVWAKEUP:
  146. trprintf("Device wakeup(): %04x\n", value);
  147. break;
  148. case TRACE_DEVSELFPOWERED:
  149. trprintf("Device selfpowered(): %04x\n", value);
  150. break;
  151. case TRACE_DEVPULLUP:
  152. trprintf("Device pullup(): %04x\n", value);
  153. break;
  154. case TRACE_CLASSBIND:
  155. trprintf("Class bind(): %04x\n", value);
  156. break;
  157. case TRACE_CLASSUNBIND:
  158. trprintf("Class unbind(): %04x\n", value);
  159. break;
  160. case TRACE_CLASSDISCONNECT:
  161. trprintf("Class disconnect(): %04x\n", value);
  162. break;
  163. case TRACE_CLASSSETUP:
  164. trprintf("Class setup(): %04x\n", value);
  165. break;
  166. case TRACE_CLASSSUSPEND:
  167. trprintf("Class suspend(): %04x\n", value);
  168. break;
  169. case TRACE_CLASSRESUME:
  170. trprintf("Class resume(): %04x\n", value);
  171. break;
  172. case TRACE_CLASSRDCOMPLETE:
  173. trprintf("Class RD request complete: %04x\n", value);
  174. break;
  175. case TRACE_CLASSWRCOMPLETE:
  176. trprintf("Class WR request complete: %04x\n", value);
  177. break;
  178. default:
  179. switch (TRACE_ID(event))
  180. {
  181. case TRACE_CLASSAPI_ID: /* Other class driver system API calls */
  182. trprintf("Class API call %d: %04x\n", TRACE_DATA(event), value);
  183. break;
  184. case TRACE_CLASSSTATE_ID: /* Track class driver state changes */
  185. trprintf("Class state %d: %04x\n", TRACE_DATA(event), value);
  186. break;
  187. case TRACE_INTENTRY_ID: /* Interrupt handler entry */
  188. trprintf("Interrupt %d entry: %04x\n", TRACE_DATA(event), value);
  189. break;
  190. case TRACE_INTDECODE_ID: /* Decoded interrupt event */
  191. #ifdef CONFIG_USBDEV_TRACE_STRINGS
  192. trprintf("Interrupt decode %3d: %-40s %04x\n", TRACE_DATA(event),
  193. get_string(g_usb_trace_strings_intdecode, TRACE_DATA(event)),
  194. value);
  195. #else
  196. trprintf("Interrupt decode %d: %04x\n", TRACE_DATA(event), value);
  197. #endif
  198. break;
  199. case TRACE_INTEXIT_ID: /* Interrupt handler exit */
  200. trprintf("Interrupt %d exit: %04x\n", TRACE_DATA(event), value);
  201. break;
  202. case TRACE_OUTREQQUEUED_ID: /* Request queued for OUT endpoint */
  203. trprintf("EP%d OUT request queued: %04x\n", TRACE_DATA(event), value);
  204. break;
  205. case TRACE_INREQQUEUED_ID: /* Request queued for IN endpoint */
  206. trprintf("EP%d IN request queued: %04x\n", TRACE_DATA(event), value);
  207. break;
  208. case TRACE_READ_ID: /* Read (OUT) action */
  209. trprintf("EP%d OUT read: %04x\n", TRACE_DATA(event), value);
  210. break;
  211. case TRACE_WRITE_ID: /* Write (IN) action */
  212. trprintf("EP%d IN write: %04x\n", TRACE_DATA(event), value);
  213. break;
  214. case TRACE_COMPLETE_ID: /* Request completed */
  215. trprintf("EP%d request complete: %04x\n", TRACE_DATA(event), value);
  216. break;
  217. case TRACE_DEVERROR_ID: /* USB controller driver error event */
  218. #ifdef CONFIG_USBDEV_TRACE_STRINGS
  219. trprintf("Controller error: %02x: %-40s %04x\n", TRACE_DATA(event),
  220. get_string(g_usb_trace_strings_deverror, TRACE_DATA(event)),
  221. value);
  222. #else
  223. trprintf("Controller error: %02x:%04x\n", TRACE_DATA(event), value);
  224. #endif
  225. break;
  226. case TRACE_CLSERROR_ID: /* USB class driver error event */
  227. trprintf("Class error: %02x:%04x\n", TRACE_DATA(event), value);
  228. break;
  229. default:
  230. trprintf("Unrecognized event: %02x:%02x:%04x\n",
  231. TRACE_ID(event) >> 8, TRACE_DATA(event), value);
  232. break;
  233. }
  234. }
  235. }