Skip to content

File usb_host.h

File List > external-docs > libDaisy > src > hid > usb_host.h

Go to the documentation of this file

Source Code

#ifndef USB_HOST_H
#define USB_HOST_H

#include <cstdint>
#include "usbh_def.h"

namespace daisy
{
typedef enum
{
    APPLICATION_IDLE = 0,
    APPLICATION_START,
    APPLICATION_READY,
    APPLICATION_DISCONNECT
} ApplicationTypeDef;

class USBHostHandle
{
  public:
    enum class Result
    {
        OK,
        BUSY,
        FAIL,
        NOT_SUPPORTED,
        UNRECOVERED_ERROR,
        ERROR_SPEED_UNKNOWN
    };

    typedef void (*ConnectCallback)(void* data);

    typedef void (*DisconnectCallback)(void* data);

    typedef void (*ClassActiveCallback)(void* userdata);

    typedef void (*ErrorCallback)(void* data);

    struct Config
    {
        Config()
        : connect_callback(nullptr),
          disconnect_callback(nullptr),
          class_active_callback(nullptr),
          error_callback(nullptr),
          userdata(nullptr)
        {
        }
        ConnectCallback     connect_callback;
        DisconnectCallback  disconnect_callback;
        ClassActiveCallback class_active_callback;
        ErrorCallback       error_callback;
        void*               userdata;
    };

    Result RegisterClass(USBH_ClassTypeDef* pClass);

    Result Init(USBHostHandle::Config& config);

    Result Deinit();

    bool IsActiveClass(USBH_ClassTypeDef* usbClass);

    Result Process();

    Result ReEnumerate();

    bool GetReady();

    bool GetPresent();

    const char* GetProductName();

    bool IsPortEnabled();

    bool IsDeviceConnected();

    USBHostHandle() : pimpl_(nullptr) {}
    USBHostHandle(const USBHostHandle& other) = default;
    USBHostHandle& operator=(const USBHostHandle& other) = default;

    class Impl; 
  private:
    Impl* pimpl_;
};

} // namespace daisy

#endif // DSY_MSD