/****************************************************************************
 * drivers/usbdev/usbdev_trprintf.c
 *
 * SPDX-License-Identifier: Apache-2.0
 *
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.  The
 * ASF licenses this file to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance with the
 * License.  You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
 * License for the specific language governing permissions and limitations
 * under the License.
 *
 ****************************************************************************/

/****************************************************************************
 * Included Files
 ****************************************************************************/

#include <nuttx/config.h>

#include <sys/types.h>
#include <stdint.h>
#include <debug.h>

#include <nuttx/usb/usbdev_trace.h>

/****************************************************************************
 * Pre-processor Definitions
 ****************************************************************************/

/****************************************************************************
 * Private Types
 ****************************************************************************/

/****************************************************************************
 * Private Function Prototypes
 ****************************************************************************/

/****************************************************************************
 * Private Data
 ****************************************************************************/

/****************************************************************************
 * Private Functions
 ****************************************************************************/

/****************************************************************************
 * Name: get_trstring
 *
 * Description:
 *   Search the driver string data to find the string matching the
 *   provided ID.
 *
 ****************************************************************************/

#ifdef CONFIG_USBDEV_TRACE_STRINGS
static FAR const char *get_trstring(FAR const struct trace_msg_t *array,
                                    uint8_t id)
{
  FAR const struct trace_msg_t *p = array;
  while (p->str != NULL)
    {
      if (p->id == id)
        {
          return p->str;
        }

      p++;
    }

  return "???";
}
#endif

/****************************************************************************
 * Public Functions
 ****************************************************************************/

/****************************************************************************
 * Name: usbtrace_trprintf
 *
 * Description:
 *   Print the trace record using the supplied printing function
 *
 ****************************************************************************/

void usbtrace_trprintf(trprintf_t trprintf, uint16_t event, uint16_t value)
{
  switch (event)
    {
    case TRACE_DEVINIT:
#ifdef CONFIG_USBDEV_TRACE_STRINGS
      trprintf("%-18s   : %-40s %04x\n", "DCD initialize",
               "Initialized", value);
#else
      trprintf("%-18s   : %04x\n", "DCD initialize",
               value);
#endif
      break;

    case TRACE_DEVUNINIT:
#ifdef CONFIG_USBDEV_TRACE_STRINGS
      trprintf("%-18s   : %-40s %04x\n", "DCD un-initialize",
               "Un-initialized", value);
#else
      trprintf("%-18s   : %04x\n", "DCD un-initialize",
               value);
#endif
      break;

    case TRACE_DEVREGISTER:
#ifdef CONFIG_USBDEV_TRACE_STRINGS
      trprintf("%-18s   : %-40s %04x\n", "DCD register",
               "Registered", value);
#else
      trprintf("%-18s   : %04x\n", "DCD register",
               value);
#endif
      break;

    case TRACE_DEVUNREGISTER:
#ifdef CONFIG_USBDEV_TRACE_STRINGS
      trprintf("%-18s   : %-40s %04x\n", "DCD un-register",
               "Un-registered", value);
#else
      trprintf("%-18s   : %04x\n", "DCD un-register",
               value);
#endif
      break;

    case TRACE_EPCONFIGURE:
#ifdef CONFIG_USBDEV_TRACE_STRINGS
      trprintf("%-18s   : %-40s %04x\n", "EP configure",
               "Endpoint configured", value);
#else
      trprintf("%-18s   : %04x\n", "EP configure",
               value);
#endif
      break;

    case TRACE_EPDISABLE:
#ifdef CONFIG_USBDEV_TRACE_STRINGS
      trprintf("%-18s   : %-40s %04x\n", "EP disable",
               "Endpoint disabled", value);
#else
      trprintf("%-18s   : %04x\n", "EP disable",
               value);
#endif
      break;

    case TRACE_EPALLOCREQ:
#ifdef CONFIG_USBDEV_TRACE_STRINGS
      trprintf("%-18s   : %-40s %04x\n", "EP allocreq",
               "Allocate endpoint request", value);
#else
      trprintf("%-18s   : %04x\n", "EP allocreq",
               value);
#endif
      break;

    case TRACE_EPFREEREQ:
#ifdef CONFIG_USBDEV_TRACE_STRINGS
      trprintf("%-18s   : %-40s %04x\n", "EP freereq",
               "Free endpoint request", value);
#else
      trprintf("%-18s   : %04x\n", "EP freereq",
               value);
#endif
      break;

    case TRACE_EPALLOCBUFFER:
#ifdef CONFIG_USBDEV_TRACE_STRINGS
      trprintf("%-18s   : %-40s %04x\n", "EP allocbuffer",
               "Allocate endpoint buffer", value);
#else
      trprintf("%-18s   : %04x\n", "EP allocbuffer",
               value);
#endif
      break;

    case TRACE_EPFREEBUFFER:
#ifdef CONFIG_USBDEV_TRACE_STRINGS
      trprintf("%-18s   : %-40s %04x\n", "EP freebuffer",
               "Free endpoint buffer", value);
#else
      trprintf("%-18s   : %04x\n", "EP freebuffer",
               value);
#endif
      break;

    case TRACE_EPSUBMIT:
#ifdef CONFIG_USBDEV_TRACE_STRINGS
      trprintf("%-18s   : %-40s %04x\n", "EP submit",
               "Submit endpoint request", value);
#else
      trprintf("%-18s   : %04x\n", "EP submit",
               value);
#endif
      break;

    case TRACE_EPCANCEL:
#ifdef CONFIG_USBDEV_TRACE_STRINGS
      trprintf("%-18s   : %-40s %04x\n", "EP cancel",
               "Cancel endpoint request", value);
#else
      trprintf("%-18s   : %04x\n", "EP cancel",
               value);
#endif
      break;

    case TRACE_EPSTALL:
#ifdef CONFIG_USBDEV_TRACE_STRINGS
      trprintf("%-18s   : %-40s %04x\n", "EP stall",
               "Stall endpoint", value);
#else
      trprintf("%-18s   : %04x\n", "EP stall",
               value);
#endif
      break;

    case TRACE_EPRESUME:
#ifdef CONFIG_USBDEV_TRACE_STRINGS
      trprintf("%-18s   : %-40s %04x\n", "EP resume",
               "Resume endpoint", value);
#else
      trprintf("%-18s   : %04x\n", "EP resume",
               value);
#endif
      break;

    case TRACE_DEVALLOCEP:
#ifdef CONFIG_USBDEV_TRACE_STRINGS
      trprintf("%-18s   : %-40s %04x\n", "DCD allocep",
               "Allocate endpoint", value);
#else
      trprintf("%-18s   : %04x\n", "DCD allocep",
               value);
#endif
      break;

    case TRACE_DEVFREEEP:
#ifdef CONFIG_USBDEV_TRACE_STRINGS
      trprintf("%-18s   : %-40s %04x\n", "DCD freeep",
               "Free endpoint", value);
#else
      trprintf("%-18s   : %04x\n", "DCD freeep",
               value);
#endif
      break;

    case TRACE_DEVGETFRAME:
#ifdef CONFIG_USBDEV_TRACE_STRINGS
      trprintf("%-18s   : %-40s %04x\n", "DCD getframe",
               "Get frame number", value);
#else
      trprintf("%-18s   : %04x\n", "DCD getframe",
               value);
#endif
      break;

    case TRACE_DEVWAKEUP:
#ifdef CONFIG_USBDEV_TRACE_STRINGS
      trprintf("%-18s   : %-40s %04x\n", "DCD wakeup",
               "Wakeup event", value);
#else
      trprintf("%-18s   : %04x\n", "DCD wakeup",
               value);
#endif
      break;

    case TRACE_DEVSELFPOWERED:
#ifdef CONFIG_USBDEV_TRACE_STRINGS
      trprintf("%-18s   : %-40s %04x\n", "DCD selfpowered",
               "Self-powered", value);
#else
      trprintf("%-18s   : %04x\n", "DCD selfpowered",
               value);
#endif
      break;

    case TRACE_DEVPULLUP:
#ifdef CONFIG_USBDEV_TRACE_STRINGS
      trprintf("%-18s   : %-40s %04x\n", "DCD pullup",
               "Soft connect", value);
#else
      trprintf("%-18s   : %04x\n", "DCD pullup",
               value);
#endif
      break;

    case TRACE_CLASSBIND:
#ifdef CONFIG_USBDEV_TRACE_STRINGS
      trprintf("%-18s   : %-40s %04x\n", "Class bind",
               "Bind class", value);
#else
      trprintf("%-18s   : %04x\n", "Class bind",
               value);
#endif
      break;

    case TRACE_CLASSUNBIND:
#ifdef CONFIG_USBDEV_TRACE_STRINGS
      trprintf("%-18s   : %-40s %04x\n", "Class unbind",
               "Un-bind class", value);
#else
      trprintf("%-18s   : %04x\n", "Class unbind",
               value);
#endif
      break;

    case TRACE_CLASSDISCONNECT:
#ifdef CONFIG_USBDEV_TRACE_STRINGS
      trprintf("%-18s   : %-40s %04x\n", "Class disconnect",
               "Disconnect class", value);
#else
      trprintf("%-18s   : %04x\n", "Class disconnect",
               value);
#endif
      break;

    case TRACE_CLASSSETUP:
#ifdef CONFIG_USBDEV_TRACE_STRINGS
      trprintf("%-18s   : %-40s %04x\n", "Class setup",
               "Class SETUP request", value);
#else
      trprintf("%-18s   : %04x\n", "Class setup",
               value);
#endif
      break;

    case TRACE_CLASSSUSPEND:
#ifdef CONFIG_USBDEV_TRACE_STRINGS
      trprintf("%-18s   : %-40s %04x\n", "Class suspend",
               "Suspend class", value);
#else
      trprintf("%-18s   : %04x\n", "Class suspend",
               value);
#endif
      break;

    case TRACE_CLASSRESUME:
#ifdef CONFIG_USBDEV_TRACE_STRINGS
      trprintf("%-18s   : %-40s %04x\n", "Class resume",
               "Resume class", value);
#else
      trprintf("%-18s   : %04x\n", "Class resume",
               value);
#endif
      break;

    case TRACE_CLASSRDCOMPLETE:
#ifdef CONFIG_USBDEV_TRACE_STRINGS
      trprintf("%-18s   : %-40s %04x\n", "Class RD complete",
               "Read request complete", value);
#else
      trprintf("%-18s   : %04x\n", "Class RD complete",
               value);
#endif
      break;

    case TRACE_CLASSWRCOMPLETE:
#ifdef CONFIG_USBDEV_TRACE_STRINGS
      trprintf("%-18s   : %-40s %04x\n", "Class RW complete",
               "Write request complete", value);
#else
      trprintf("%-18s   : %04x\n", "Class RW complete",
               value);
#endif
      break;

    default:
      switch (TRACE_ID(event))
        {
        case TRACE_CLASSAPI_ID:        /* Other class driver system API calls */
#ifdef CONFIG_USBDEV_TRACE_STRINGS
          trprintf("%-18s %02x: %-40s %04x\n", "Class API call",
                   TRACE_DATA(event),
                   get_trstring(g_usb_trace_strings_clsapi,
                   TRACE_DATA(event)),
                   value);
#else
          trprintf("%-18s %02x: %04x\n", "Class API call",
                   TRACE_DATA(event), value);
#endif
          break;

        case TRACE_CLASSSTATE_ID:      /* Track class driver state changes */
#ifdef CONFIG_USBDEV_TRACE_STRINGS
          trprintf("%-18s %02x: %-40s %04x\n", "Class state",
                   TRACE_DATA(event),
                   get_trstring(g_usb_trace_strings_clsstate,
                   TRACE_DATA(event)),
                   value);
#else
          trprintf("%-18s %02x: %04x\n", "Class state",
                   TRACE_DATA(event), value);
#endif
          break;

        case TRACE_INTENTRY_ID:        /* Interrupt handler entry */
#ifdef CONFIG_USBDEV_TRACE_STRINGS
          trprintf("%-18s%3d: %-40s %04x\n", "Interrupt entry",
                   TRACE_DATA(event), "ENTRY", value);
#else
          trprintf("%-18s%3d: %04x\n", "Interrupt entry",
                   TRACE_DATA(event), value);
#endif
          break;

        case TRACE_INTDECODE_ID:       /* Decoded interrupt event */
#ifdef CONFIG_USBDEV_TRACE_STRINGS
          trprintf("%-18s%3d: %-40s %04x\n", "Interrupt decode",
                   TRACE_DATA(event),
                   get_trstring(g_usb_trace_strings_intdecode,
                   TRACE_DATA(event)),
                   value);
#else
          trprintf("%-18s%3d: %04x\n", "Interrupt decode",
                   TRACE_DATA(event), value);
#endif
          break;

        case TRACE_INTEXIT_ID:         /* Interrupt handler exit */
#ifdef CONFIG_USBDEV_TRACE_STRINGS
          trprintf("%-18s%3d: %-40s %04x\n", "Interrupt exit",
                   TRACE_DATA(event), "EXIT", value);
#else
          trprintf("%-18s%3d: %04x\n", "Interrupt exit",
                   TRACE_DATA(event), value);
#endif
          break;

        case TRACE_OUTREQQUEUED_ID:    /* Request queued for OUT endpoint */
#ifdef CONFIG_USBDEV_TRACE_STRINGS
          trprintf("EP%2d %-16s: %-40s %04x\n",
                   TRACE_DATA(event), "OUT queued",
                   "Read request queued", value);
#else
          trprintf("EP%2d %-16s: %04x\n",
                   TRACE_DATA(event), "OUT queued", value);
#endif
          break;

        case TRACE_INREQQUEUED_ID:     /* Request queued for IN endpoint */
#ifdef CONFIG_USBDEV_TRACE_STRINGS
          trprintf("EP%2d %-16s: %-40s %04x\n",
                   TRACE_DATA(event), "IN queued",
                   "Write request queued", value);
#else
          trprintf("EP%2d %-16s: %04x\n",
                   TRACE_DATA(event), "IN queued", value);
#endif
          break;

        case TRACE_READ_ID:            /* Read (OUT) action */
#ifdef CONFIG_USBDEV_TRACE_STRINGS
          trprintf("EP%2d %-16s: %-40s %04x\n",
                   TRACE_DATA(event), "OUT read",
                   "Incoming data read", value);
#else
          trprintf("EP%2d %-16s: %04x\n",
                   TRACE_DATA(event), "OUT read", value);
#endif
          break;

        case TRACE_WRITE_ID:           /* Write (IN) action */
#ifdef CONFIG_USBDEV_TRACE_STRINGS
          trprintf("EP%2d %-16s: %-40s %04x\n",
                   TRACE_DATA(event), "IN write",
                   "Outgoing data written", value);
#else
          trprintf("EP%2d %-16s: %04x\n",
                   TRACE_DATA(event), "IN write", value);
#endif
          break;

        case TRACE_COMPLETE_ID:        /* Request completed */
#ifdef CONFIG_USBDEV_TRACE_STRINGS
          trprintf("EP%2d %-16s: %-40s %04x\n",
                   TRACE_DATA(event), "Request complete",
                   "Request completed", value);
#else
          trprintf("EP%2d %-16s: %04x\n",
                   TRACE_DATA(event), "Request complete", value);
#endif
          break;

        case TRACE_DEVERROR_ID:        /* USB controller driver error event */
#ifdef CONFIG_USBDEV_TRACE_STRINGS
          trprintf("%-18s %02x: %-40s %04x\n", "Controller error",
                   TRACE_DATA(event),
                   get_trstring(g_usb_trace_strings_deverror,
                   TRACE_DATA(event)),
                   value);
#else
          trprintf("%-18s %02x: %04x\n", "Controller error",
                   TRACE_DATA(event),
                   value);
#endif
          break;

        case TRACE_CLSERROR_ID:        /* USB class driver error event */
#ifdef CONFIG_USBDEV_TRACE_STRINGS
          trprintf("%-18s %02x: %-40s %04x\n", "Class error",
                   TRACE_DATA(event),
                   get_trstring(g_usb_trace_strings_clserror,
                   TRACE_DATA(event)),
                   value);
#else
          trprintf("%-18s %02x: %04x\n", "Class error",
                   TRACE_DATA(event), value);
#endif
          break;

        default:
          trprintf("Unrecognized event   : %02x:%02x:%04x\n",
                TRACE_ID(event) >> 8, TRACE_DATA(event), value);
          break;
        }
    }
}
