// Copyright lowRISC contributors.
// Licensed under the Apache License, Version 2.0, see LICENSE for details.
// SPDX-License-Identifier: Apache-2.0

#ifndef __USB_SIMPLESERIAL_H__
#define __USB_SIMPLESERIAL_H__

#include <stddef.h>
#include <stdint.h>

#include "sw/device/lib/common.h"
#include "usbdev.h"

// This is only here because caller of _init needs it
typedef struct usb_ss_ctx {
  void *ctx;
  int ep;
  int cur_buf;
  int cur_cpos;
  union usb_ss_b2w {
    uint32_t data_w;
    uint8_t data_b[4];
  } chold;
  void (*got_byte)(uint8_t);
} usb_ss_ctx_t;

/**
 * Send a byte on a simpleserial endpoint
 *
 * @param ssctx instance context
 * @param c byte to send
 */
void usb_simpleserial_send_byte(usb_ss_ctx_t *ssctx, uint8_t c);

/**
 * Initialize a simpleserial endpoint
 *
 * @param ssctx unintialized simpleserial instance context
 * @param ctx initialized usbdev context
 * @param ep endpoint number for this instance
 * @param got_byte callback function for when a byte is received
 */
void usb_simpleserial_init(usb_ss_ctx_t *ssctx, usbdev_ctx_t *ctx, int ep,
                           void (*got_byte)(uint8_t));

#endif
