mirror of
https://github.com/davidgiven/fluxengine.git
synced 2025-10-24 11:11:02 -07:00
102 lines
2.5 KiB
C++
102 lines
2.5 KiB
C++
#ifndef USB_H
|
|
#define USB_H
|
|
|
|
#include "lib/core/bytes.h"
|
|
#include "lib/config/flags.h"
|
|
|
|
class Fluxmap;
|
|
class GreaseweazleProto;
|
|
class ApplesauceProto;
|
|
namespace libusbp
|
|
{
|
|
class device;
|
|
}
|
|
|
|
class USB
|
|
{
|
|
public:
|
|
virtual ~USB();
|
|
|
|
virtual void recalibrate()
|
|
{
|
|
seek(0);
|
|
};
|
|
virtual void seek(int track) = 0;
|
|
virtual nanoseconds_t getRotationalPeriod(int hardSectorCount) = 0;
|
|
virtual void testBulkWrite() = 0;
|
|
virtual void testBulkRead() = 0;
|
|
virtual Bytes read(int side,
|
|
bool synced,
|
|
nanoseconds_t readTime,
|
|
nanoseconds_t hardSectorThreshold) = 0;
|
|
virtual void write(
|
|
int side, const Bytes& bytes, nanoseconds_t hardSectorThreshold) = 0;
|
|
virtual void erase(int side, nanoseconds_t hardSectorThreshold) = 0;
|
|
virtual void setDrive(int drive, bool high_density, int index_mode) = 0;
|
|
virtual void measureVoltages(struct voltages_frame* voltages) = 0;
|
|
|
|
protected:
|
|
std::string usberror(int i);
|
|
};
|
|
|
|
extern USB& getUsb();
|
|
|
|
extern USB* createFluxengineUsb(libusbp::device& device);
|
|
extern USB* createGreaseweazleUsb(
|
|
const std::string& serialPort, const GreaseweazleProto& config);
|
|
extern USB* createApplesauceUsb(
|
|
const std::string& serialPort, const ApplesauceProto& config);
|
|
|
|
static inline void usbRecalibrate()
|
|
{
|
|
getUsb().recalibrate();
|
|
}
|
|
static inline void usbSeek(int track)
|
|
{
|
|
getUsb().seek(track);
|
|
}
|
|
static inline void usbTestBulkWrite()
|
|
{
|
|
getUsb().testBulkWrite();
|
|
}
|
|
static inline void usbTestBulkRead()
|
|
{
|
|
getUsb().testBulkRead();
|
|
}
|
|
|
|
static inline void usbErase(int side, nanoseconds_t hardSectorThreshold)
|
|
{
|
|
getUsb().erase(side, hardSectorThreshold);
|
|
}
|
|
|
|
static inline nanoseconds_t usbGetRotationalPeriod(int hardSectorCount)
|
|
{
|
|
return getUsb().getRotationalPeriod(hardSectorCount);
|
|
}
|
|
|
|
static inline Bytes usbRead(int side,
|
|
bool synced,
|
|
nanoseconds_t readTime,
|
|
nanoseconds_t hardSectorThreshold)
|
|
{
|
|
return getUsb().read(side, synced, readTime, hardSectorThreshold);
|
|
}
|
|
|
|
static inline void usbWrite(
|
|
int side, const Bytes& bytes, nanoseconds_t hardSectorThreshold)
|
|
{
|
|
getUsb().write(side, bytes, hardSectorThreshold);
|
|
}
|
|
|
|
static inline void usbSetDrive(int drive, bool high_density, int index_mode)
|
|
{
|
|
getUsb().setDrive(drive, high_density, index_mode);
|
|
}
|
|
|
|
static inline void usbMeasureVoltages(struct voltages_frame* voltages)
|
|
{
|
|
getUsb().measureVoltages(voltages);
|
|
}
|
|
|
|
#endif
|