Skip to content

Commit

Permalink
Add missing files...
Browse files Browse the repository at this point in the history
  • Loading branch information
davidgiven committed Nov 2, 2023
1 parent 29f5feb commit a7cb7eb
Show file tree
Hide file tree
Showing 3 changed files with 123 additions and 0 deletions.
36 changes: 36 additions & 0 deletions lib/fluxsource/catweasel.cc
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
#include "lib/globals.h"
#include "lib/fluxmap.h"
#include "lib/bytes.h"
#include "lib/fluxsource/catweasel.h"

std::unique_ptr<Fluxmap> decodeCatweaselData(
const Bytes& bytes, nanoseconds_t clock)
{
std::unique_ptr<Fluxmap> fluxmap(new Fluxmap);
uint32_t pending = 0;
bool oldindex = true;
const uint8_t* ptr = bytes.begin();
while (ptr != bytes.end())
{
uint32_t b = *ptr++;
bool index = !!(b & 0x80);
b &= 0x7f;
if (b == 0x7f)
{
pending += 0x7f;
continue;
}
b += pending;
pending = 0;

double interval_ns = b * clock;
fluxmap->appendInterval(interval_ns / NS_PER_TICK);
fluxmap->appendPulse();

if (index && !oldindex)
fluxmap->appendIndex();
oldindex = index;
}

return fluxmap;
}
10 changes: 10 additions & 0 deletions lib/fluxsource/catweasel.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
#ifndef CATWEASEL_H
#define CATWEASEL_H

class Fluxmap;
class Bytes;

extern std::unique_ptr<Fluxmap> decodeCatweaselData(
const Bytes& bytes, nanoseconds_t clock);

#endif
77 changes: 77 additions & 0 deletions lib/fluxsource/dmkfluxsource.cc
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
#include "lib/globals.h"
#include "lib/fluxmap.h"
#include "lib/fluxsource/fluxsource.pb.h"
#include "lib/fluxsource/fluxsource.h"
#include "lib/fluxsource/catweasel.h"
#include "lib/proto.h"
#include "lib/logger.h"
#include <fstream>
#include <filesystem>

class DmkFluxSourceIterator : public FluxSourceIterator
{
public:
DmkFluxSourceIterator(const std::string& path, int track, int side):
_path(path),
_track(track),
_side(side)
{
}

bool hasNext() const override
{
std::string p = getPath();
return std::filesystem::exists(getPath());
}

std::unique_ptr<const Fluxmap> next() override
{
std::string path = getPath();
log("DMK: reading {}", path);
std::ifstream ifstream(getPath(), std::ios::binary);
if (!ifstream)
return std::make_unique<Fluxmap>();
_count++;

Bytes bytes(ifstream);
return decodeCatweaselData(bytes, 1e9 / 7080500.0);
}

private:
const std::string getPath() const
{
return fmt::format(
"{}/C_S{:01}T{:02}.{:03}", _path, _side, _track, _count);
}

private:
const std::string _path;
const int _track;
const int _side;
int _count = 0;
};

class DmkFluxSource : public FluxSource
{
public:
DmkFluxSource(const DmkFluxSourceProto& config): _path(config.directory())
{
}

public:
std::unique_ptr<FluxSourceIterator> readFlux(int track, int side) override
{
return std::make_unique<DmkFluxSourceIterator>(_path, track, side);
}

void recalibrate() override {}

private:
const std::string _path;
};

std::unique_ptr<FluxSource> FluxSource::createDmkFluxSource(
const DmkFluxSourceProto& config)
{
return std::unique_ptr<FluxSource>(new DmkFluxSource(config));
}

0 comments on commit a7cb7eb

Please sign in to comment.