1 #ifndef FLUXSOURCE_H
2 #define FLUXSOURCE_H
3 
4 #include "flags.h"
5 
6 extern FlagGroup hardwareFluxSourceFlags;
7 
8 class Fluxmap;
9 class FluxSpec;
10 
11 class FluxSource
12 {
13 public:
~FluxSource()14     virtual ~FluxSource() {}
15 
16 private:
17     static std::unique_ptr<FluxSource> createSqliteFluxSource(const std::string& filename);
18     static std::unique_ptr<FluxSource> createHardwareFluxSource(unsigned drive);
19     static std::unique_ptr<FluxSource> createStreamFluxSource(const std::string& path);
20 
21 public:
22     static std::unique_ptr<FluxSource> create(const FluxSpec& spec);
23 
24 public:
25     virtual std::unique_ptr<Fluxmap> readFlux(int track, int side) = 0;
recalibrate()26     virtual void recalibrate() {}
retryable()27     virtual bool retryable() { return false; }
28 };
29 
30 extern void setHardwareFluxSourceRevolutions(double revolutions);
31 extern void setHardwareFluxSourceDensity(bool high_density);
32 extern void setHardwareFluxSourceSynced(bool synced);
33 extern void setHardwareFluxSourceHardSectorCount(int sectorCount);
34 
35 #endif
36 
37