#ifndef __MASS_STORAGE_H__
#define __MASS_STORAGE_H__

#include <globals.h>
#if defined(SOC_USB_OTG_SUPPORTED)
#include <USBMSC.h>

class MassStorage {
public:
    static bool shouldStop;
    static int32_t status;

    /////////////////////////////////////////////////////////////////////////////////////
    // Constructor
    /////////////////////////////////////////////////////////////////////////////////////
    MassStorage();
    ~MassStorage();

    /////////////////////////////////////////////////////////////////////////////////////
    // Life Cycle
    /////////////////////////////////////////////////////////////////////////////////////
    void setup();
    void loop();

    /////////////////////////////////////////////////////////////////////////////////////
    // Operations
    /////////////////////////////////////////////////////////////////////////////////////
    static void setShouldStop(bool value) { shouldStop = value; }

    /////////////////////////////////////////////////////////////////////////////////////
    // Display functions
    /////////////////////////////////////////////////////////////////////////////////////
    static void displayMessage(String message);

private:
    USBMSC msc;

    /////////////////////////////////////////////////////////////////////////////////////
    // Setup
    /////////////////////////////////////////////////////////////////////////////////////
    void beginUsb(void);
    void setupUsbCallback(void);
    void setupUsbEvent(void);
};

int32_t usbWriteCallback(uint32_t lba, uint32_t offset, uint8_t *buffer, uint32_t bufsize);
int32_t usbReadCallback(uint32_t lba, uint32_t offset, void *buffer, uint32_t bufsize);
bool usbStartStopCallback(uint8_t power_condition, bool start, bool load_eject);

void drawUSBStickIcon(bool plugged);

#endif // MASS_STORAGE_H
#endif // SOC_USB_OTG_SUPPORTED
