Merge pull request #778 from davidgiven/refactor

Even more cleanup refactoring.
This commit is contained in:
David Given
2024-10-14 00:35:08 +02:00
committed by GitHub
214 changed files with 1600 additions and 1257 deletions

View File

@@ -2,10 +2,10 @@
#include "lib/decoders/decoders.h"
#include "aeslanier.h"
#include "lib/core/crc.h"
#include "lib/fluxmap.h"
#include "lib/data/fluxmap.h"
#include "lib/decoders/fluxmapreader.h"
#include "lib/decoders/fluxpattern.h"
#include "lib/sector.h"
#include "lib/data/sector.h"
#include "lib/core/bytes.h"
#include "fmt/format.h"
#include <string.h>

View File

@@ -2,10 +2,10 @@
#include "lib/decoders/decoders.h"
#include "agat.h"
#include "lib/core/crc.h"
#include "lib/fluxmap.h"
#include "lib/data/fluxmap.h"
#include "lib/decoders/fluxmapreader.h"
#include "lib/decoders/fluxpattern.h"
#include "lib/sector.h"
#include "lib/data/sector.h"
#include "lib/core/bytes.h"
#include "fmt/format.h"
#include <string.h>

View File

@@ -4,8 +4,8 @@
#include "agat.h"
#include "lib/core/crc.h"
#include "lib/readerwriter.h"
#include "lib/image.h"
#include "lib/layout.h"
#include "lib/data/image.h"
#include "lib/data/layout.h"
#include "arch/agat/agat.pb.h"
#include "lib/encoders/encoders.pb.h"

View File

@@ -1,10 +1,10 @@
#include "lib/core/globals.h"
#include "lib/fluxmap.h"
#include "lib/data/fluxmap.h"
#include "lib/decoders/fluxmapreader.h"
#include "lib/decoders/fluxpattern.h"
#include "protocol.h"
#include "lib/decoders/decoders.h"
#include "lib/sector.h"
#include "lib/data/sector.h"
#include "amiga.h"
#include "lib/core/bytes.h"
#include "fmt/format.h"

View File

@@ -4,7 +4,7 @@
#include "amiga.h"
#include "lib/core/crc.h"
#include "lib/readerwriter.h"
#include "lib/image.h"
#include "lib/data/image.h"
#include "arch/amiga/amiga.pb.h"
#include "lib/encoders/encoders.pb.h"

View File

@@ -1,10 +1,10 @@
#include "lib/core/globals.h"
#include "lib/fluxmap.h"
#include "lib/data/fluxmap.h"
#include "lib/decoders/fluxmapreader.h"
#include "lib/decoders/fluxpattern.h"
#include "protocol.h"
#include "lib/decoders/decoders.h"
#include "lib/sector.h"
#include "lib/data/sector.h"
#include "apple2.h"
#include "arch/apple2/apple2.pb.h"
#include "lib/decoders/decoders.pb.h"

View File

@@ -2,9 +2,9 @@
#include "arch/apple2/apple2.h"
#include "lib/decoders/decoders.h"
#include "lib/encoders/encoders.h"
#include "lib/sector.h"
#include "lib/data/sector.h"
#include "lib/readerwriter.h"
#include "lib/image.h"
#include "lib/data/image.h"
#include "fmt/format.h"
#include "lib/encoders/encoders.pb.h"
#include <ctype.h>

View File

@@ -1,11 +1,11 @@
#include "lib/core/globals.h"
#include "lib/fluxmap.h"
#include "lib/data/fluxmap.h"
#include "lib/decoders/fluxmapreader.h"
#include "lib/decoders/fluxpattern.h"
#include "lib/decoders/decoders.h"
#include "lib/encoders/encoders.h"
#include "brother.h"
#include "lib/sector.h"
#include "lib/data/sector.h"
#include "lib/core/bytes.h"
#include "lib/core/crc.h"
#include <ctype.h>

View File

@@ -4,7 +4,7 @@
#include "brother.h"
#include "lib/core/crc.h"
#include "lib/readerwriter.h"
#include "lib/image.h"
#include "lib/data/image.h"
#include "arch/brother/brother.pb.h"
#include "lib/encoders/encoders.pb.h"

View File

@@ -1,10 +1,10 @@
#include "lib/core/globals.h"
#include "lib/fluxmap.h"
#include "lib/data/fluxmap.h"
#include "lib/decoders/fluxmapreader.h"
#include "lib/decoders/fluxpattern.h"
#include "protocol.h"
#include "lib/decoders/decoders.h"
#include "lib/sector.h"
#include "lib/data/sector.h"
#include "c64.h"
#include "lib/core/crc.h"
#include "lib/core/bytes.h"

View File

@@ -3,13 +3,13 @@
#include "lib/encoders/encoders.h"
#include "c64.h"
#include "lib/core/crc.h"
#include "lib/sector.h"
#include "lib/data/sector.h"
#include "lib/readerwriter.h"
#include "lib/image.h"
#include "lib/data/image.h"
#include "fmt/format.h"
#include "arch/c64/c64.pb.h"
#include "lib/encoders/encoders.pb.h"
#include "lib/layout.h"
#include "lib/data/layout.h"
#include <ctype.h>
#include "lib/core/bytes.h"

View File

@@ -1,10 +1,10 @@
#include "lib/core/globals.h"
#include "lib/fluxmap.h"
#include "lib/data/fluxmap.h"
#include "lib/decoders/fluxmapreader.h"
#include "lib/decoders/fluxpattern.h"
#include "protocol.h"
#include "lib/decoders/decoders.h"
#include "lib/sector.h"
#include "lib/data/sector.h"
#include "f85.h"
#include "lib/core/crc.h"
#include "lib/core/bytes.h"

View File

@@ -1,10 +1,10 @@
#include "lib/core/globals.h"
#include "lib/fluxmap.h"
#include "lib/data/fluxmap.h"
#include "lib/decoders/fluxmapreader.h"
#include "lib/decoders/fluxpattern.h"
#include "protocol.h"
#include "lib/decoders/decoders.h"
#include "lib/sector.h"
#include "lib/data/sector.h"
#include "fb100.h"
#include "lib/core/crc.h"
#include "lib/core/bytes.h"

View File

@@ -2,13 +2,13 @@
#include "lib/decoders/decoders.h"
#include "ibm.h"
#include "lib/core/crc.h"
#include "lib/fluxmap.h"
#include "lib/data/fluxmap.h"
#include "lib/decoders/fluxmapreader.h"
#include "lib/decoders/fluxpattern.h"
#include "lib/sector.h"
#include "lib/data/sector.h"
#include "arch/ibm/ibm.pb.h"
#include "lib/proto.h"
#include "lib/layout.h"
#include "lib/config/proto.h"
#include "lib/data/layout.h"
#include <string.h>
static_assert(std::is_trivially_copyable<IbmIdam>::value,

View File

@@ -1,16 +1,16 @@
#include "lib/core/globals.h"
#include "lib/config.h"
#include "lib/config/config.h"
#include "lib/decoders/decoders.h"
#include "lib/encoders/encoders.h"
#include "ibm.h"
#include "lib/core/crc.h"
#include "lib/readerwriter.h"
#include "lib/image.h"
#include "lib/data/image.h"
#include "arch/ibm/ibm.pb.h"
#include "lib/encoders/encoders.pb.h"
#include "fmt/format.h"
#include "lib/proto.h"
#include "lib/layout.h"
#include "lib/config/proto.h"
#include "lib/data/layout.h"
#include <ctype.h>
/* IAM record separator:

View File

@@ -1,10 +1,10 @@
#include "lib/core/globals.h"
#include "lib/fluxmap.h"
#include "lib/data/fluxmap.h"
#include "lib/decoders/fluxmapreader.h"
#include "lib/decoders/fluxpattern.h"
#include "protocol.h"
#include "lib/decoders/decoders.h"
#include "lib/sector.h"
#include "lib/data/sector.h"
#include "macintosh.h"
#include "lib/core/bytes.h"
#include "fmt/format.h"

View File

@@ -4,10 +4,10 @@
#include "macintosh.h"
#include "lib/core/crc.h"
#include "lib/readerwriter.h"
#include "lib/image.h"
#include "lib/data/image.h"
#include "fmt/format.h"
#include "lib/encoders/encoders.pb.h"
#include "lib/layout.h"
#include "lib/data/layout.h"
#include "arch/macintosh/macintosh.pb.h"
#include <ctype.h>

View File

@@ -1,9 +1,9 @@
#include "lib/core/globals.h"
#include "lib/fluxmap.h"
#include "lib/data/fluxmap.h"
#include "lib/decoders/fluxmapreader.h"
#include "lib/decoders/fluxpattern.h"
#include "lib/decoders/decoders.h"
#include "lib/sector.h"
#include "lib/data/sector.h"
#include "micropolis.h"
#include "lib/core/bytes.h"
#include "fmt/format.h"

View File

@@ -1,9 +1,9 @@
#include "lib/core/globals.h"
#include "micropolis.h"
#include "lib/sector.h"
#include "lib/data/sector.h"
#include "lib/decoders/decoders.h"
#include "lib/encoders/encoders.h"
#include "lib/image.h"
#include "lib/data/image.h"
#include "lib/encoders/encoders.pb.h"
static void write_sector(std::vector<bool>& bits,

View File

@@ -2,10 +2,10 @@
#include "lib/decoders/decoders.h"
#include "arch/mx/mx.h"
#include "lib/core/crc.h"
#include "lib/fluxmap.h"
#include "lib/data/fluxmap.h"
#include "lib/decoders/fluxmapreader.h"
#include "lib/decoders/fluxpattern.h"
#include "lib/sector.h"
#include "lib/data/sector.h"
#include <string.h>
const int SECTOR_SIZE = 256;

View File

@@ -12,11 +12,11 @@
*/
#include "lib/core/globals.h"
#include "lib/fluxmap.h"
#include "lib/data/fluxmap.h"
#include "lib/decoders/fluxmapreader.h"
#include "lib/decoders/fluxpattern.h"
#include "lib/decoders/decoders.h"
#include "lib/sector.h"
#include "lib/data/sector.h"
#include "northstar.h"
#include "lib/core/bytes.h"
#include "lib/decoders/decoders.pb.h"

View File

@@ -1,10 +1,10 @@
#include "lib/core/globals.h"
#include "northstar.h"
#include "lib/sector.h"
#include "lib/data/sector.h"
#include "lib/core/bytes.h"
#include "lib/decoders/decoders.h"
#include "lib/encoders/encoders.h"
#include "lib/image.h"
#include "lib/data/image.h"
#include "lib/encoders/encoders.pb.h"
#define GAP_FILL_SIZE_SD 30

View File

@@ -1,10 +1,10 @@
#include "lib/core/globals.h"
#include "lib/decoders/decoders.h"
#include "lib/core/crc.h"
#include "lib/fluxmap.h"
#include "lib/data/fluxmap.h"
#include "lib/decoders/fluxmapreader.h"
#include "lib/decoders/fluxpattern.h"
#include "lib/sector.h"
#include "lib/data/sector.h"
#include "lib/core/bytes.h"
#include "rolandd20.h"
#include <string.h>

View File

@@ -1,10 +1,10 @@
#include "lib/core/globals.h"
#include "lib/fluxmap.h"
#include "lib/data/fluxmap.h"
#include "lib/decoders/fluxmapreader.h"
#include "lib/decoders/fluxpattern.h"
#include "protocol.h"
#include "lib/decoders/decoders.h"
#include "lib/sector.h"
#include "lib/data/sector.h"
#include "smaky6.h"
#include "lib/core/bytes.h"
#include "lib/core/crc.h"

View File

@@ -1,24 +1,21 @@
#include "lib/core/globals.h"
#include "lib/config.h"
#include "lib/config/config.h"
#include "lib/decoders/decoders.h"
#include "arch/tartu/tartu.h"
#include "lib/core/crc.h"
#include "lib/fluxmap.h"
#include "lib/data/fluxmap.h"
#include "lib/decoders/fluxmapreader.h"
#include "lib/decoders/fluxpattern.h"
#include "lib/sector.h"
#include "lib/data/sector.h"
#include <string.h>
constexpr uint64_t HEADER_BITS = 0xaaaaaaaa44895554LL;
constexpr uint64_t DATA_BITS = 0xaaaaaaaa44895545LL;
constexpr uint64_t DATA_BITS = 0xaaaaaaaa44895545LL;
static const FluxPattern HEADER_PATTERN(64, HEADER_BITS);
static const FluxPattern DATA_PATTERN(64, DATA_BITS);
const FluxMatchers ANY_RECORD_PATTERN {
&HEADER_PATTERN,
&DATA_PATTERN
};
const FluxMatchers ANY_RECORD_PATTERN{&HEADER_PATTERN, &DATA_PATTERN};
class TartuDecoder : public Decoder
{
@@ -29,9 +26,7 @@ public:
{
}
void beginTrack() override
{
}
void beginTrack() override {}
nanoseconds_t advanceToNextRecord() override
{
@@ -45,7 +40,7 @@ public:
auto bits = readRawBits(16 * 4);
auto bytes = decodeFmMfm(bits).slice(0, 4);
ByteReader br(bytes);
uint8_t track = br.read_8();
_sector->logicalTrack = track >> 1;
@@ -54,7 +49,7 @@ public:
_sector->logicalSector = br.read_8();
uint8_t wantChecksum = br.read_8();
uint8_t gotChecksum = ~sumBytes(bytes.slice(0, 3));
if (wantChecksum == gotChecksum)
_sector->status = Sector::DATA_MISSING;
@@ -65,14 +60,15 @@ public:
{
if (readRaw64() != DATA_BITS)
return;
const auto& bits = readRawBits(129 * 16);
const auto& bytes = decodeFmMfm(bits).slice(0, 129);
_sector->data = bytes.slice(0, 128);
uint8_t wantChecksum = bytes.reader().seek(128).read_8();
uint8_t gotChecksum = ~sumBytes(_sector->data);
_sector->status = (wantChecksum == gotChecksum) ? Sector::OK : Sector::BAD_CHECKSUM;
_sector->status =
(wantChecksum == gotChecksum) ? Sector::OK : Sector::BAD_CHECKSUM;
}
private:
@@ -83,4 +79,3 @@ std::unique_ptr<Decoder> createTartuDecoder(const DecoderProto& config)
{
return std::unique_ptr<Decoder>(new TartuDecoder(config));
}

View File

@@ -1,11 +1,11 @@
#include "lib/core/globals.h"
#include "lib/config.h"
#include "lib/config/config.h"
#include "lib/decoders/decoders.h"
#include "lib/encoders/encoders.h"
#include "arch/tartu/tartu.h"
#include "lib/core/crc.h"
#include "lib/fluxmap.h"
#include "lib/sector.h"
#include "lib/data/fluxmap.h"
#include "lib/data/sector.h"
#include <string.h>
class TartuEncoder : public Encoder

View File

@@ -3,10 +3,10 @@
#include "lib/encoders/encoders.h"
#include "arch/tids990/tids990.h"
#include "lib/core/crc.h"
#include "lib/fluxmap.h"
#include "lib/data/fluxmap.h"
#include "lib/decoders/fluxmapreader.h"
#include "lib/decoders/fluxpattern.h"
#include "lib/sector.h"
#include "lib/data/sector.h"
#include <string.h>
#include "fmt/format.h"

View File

@@ -4,7 +4,7 @@
#include "tids990.h"
#include "lib/core/crc.h"
#include "lib/readerwriter.h"
#include "lib/image.h"
#include "lib/data/image.h"
#include "arch/tids990/tids990.pb.h"
#include "lib/encoders/encoders.pb.h"
#include "fmt/format.h"

View File

@@ -1,10 +1,10 @@
#include "lib/core/globals.h"
#include "lib/fluxmap.h"
#include "lib/data/fluxmap.h"
#include "lib/decoders/fluxmapreader.h"
#include "lib/decoders/fluxpattern.h"
#include "protocol.h"
#include "lib/decoders/decoders.h"
#include "lib/sector.h"
#include "lib/data/sector.h"
#include "victor9k.h"
#include "lib/core/crc.h"
#include "lib/core/bytes.h"

View File

@@ -3,13 +3,13 @@
#include "lib/encoders/encoders.h"
#include "victor9k.h"
#include "lib/core/crc.h"
#include "lib/sector.h"
#include "lib/data/sector.h"
#include "lib/readerwriter.h"
#include "lib/image.h"
#include "lib/data/image.h"
#include "fmt/format.h"
#include "arch/victor9k/victor9k.pb.h"
#include "lib/encoders/encoders.pb.h"
#include "lib/layout.h"
#include "lib/data/layout.h"
#include <ctype.h>
#include "lib/core/bytes.h"

View File

@@ -1,10 +1,10 @@
#include "lib/core/globals.h"
#include "lib/fluxmap.h"
#include "lib/data/fluxmap.h"
#include "lib/decoders/fluxmapreader.h"
#include "lib/decoders/fluxpattern.h"
#include "protocol.h"
#include "lib/decoders/decoders.h"
#include "lib/sector.h"
#include "lib/data/sector.h"
#include "zilogmcz.h"
#include "lib/core/bytes.h"
#include "lib/core/crc.h"

View File

@@ -25,16 +25,13 @@ protocc(name="fl2_proto_lib", srcs=["+fl2_proto"])
cxxlibrary(
name="lib",
srcs=[
"./lib/config.cc",
"./lib/decoders/decoders.cc",
"./lib/fl2.cc",
"./lib/decoders/fluxdecoder.cc",
"./lib/decoders/fluxmapreader.cc",
"./lib/decoders/fluxpattern.cc",
"./lib/decoders/fmmfm.cc",
"./lib/encoders/encoders.cc",
"./lib/fl2.cc",
"./lib/flags.cc",
"./lib/fluxmap.cc",
"./lib/fluxsink/a2rfluxsink.cc",
"./lib/fluxsink/aufluxsink.cc",
"./lib/fluxsink/fl2fluxsink.cc",
@@ -58,7 +55,6 @@ cxxlibrary(
"./lib/fluxsource/scpfluxsource.cc",
"./lib/fluxsource/testpatternfluxsource.cc",
"./lib/globals.cc",
"./lib/image.cc",
"./lib/imagereader/d64imagereader.cc",
"./lib/imagereader/d88imagereader.cc",
"./lib/imagereader/dimimagereader.cc",
@@ -80,12 +76,8 @@ cxxlibrary(
"./lib/imagewriter/ldbsimagewriter.cc",
"./lib/imagewriter/nsiimagewriter.cc",
"./lib/imagewriter/rawimagewriter.cc",
"./lib/layout.cc",
"./lib/ldbs.cc",
"./lib/logger.cc",
"./lib/proto.cc",
"./lib/readerwriter.cc",
"./lib/sector.cc",
"./lib/usb/applesauceusb.cc",
"./lib/usb/fluxengineusb.cc",
"./lib/usb/greaseweazle.cc",
@@ -156,7 +148,6 @@ cxxlibrary(
"arch/c64/c64.h": "./arch/c64/c64.h",
"arch/tartu/tartu.h": "./arch/tartu/tartu.h",
"lib/a2r.h": "./lib/a2r.h",
"lib/config.h": "./lib/config.h",
"lib/decoders/decoders.h": "./lib/decoders/decoders.h",
"lib/decoders/fluxdecoder.h": "./lib/decoders/fluxdecoder.h",
"lib/decoders/fluxmapreader.h": "./lib/decoders/fluxmapreader.h",
@@ -165,24 +156,16 @@ cxxlibrary(
"lib/encoders/encoders.h": "./lib/encoders/encoders.h",
"lib/scp.h": "./lib/scp.h",
"lib/fl2.h": "./lib/fl2.h",
"lib/flags.h": "./lib/flags.h",
"lib/flux.h": "./lib/flux.h",
"lib/fluxmap.h": "./lib/fluxmap.h",
"lib/fluxsink/fluxsink.h": "./lib/fluxsink/fluxsink.h",
"lib/fluxsource/catweasel.h": "lib/fluxsource/catweasel.h",
"lib/fluxsource/fluxsource.h": "lib/fluxsource/fluxsource.h",
"lib/fluxsource/flx.h": "lib/fluxsource/flx.h",
"lib/fluxsource/kryoflux.h": "lib/fluxsource/kryoflux.h",
"lib/globals.h": "./lib/globals.h",
"lib/image.h": "./lib/image.h",
"lib/imagereader/imagereader.h": "./lib/imagereader/imagereader.h",
"lib/imagewriter/imagewriter.h": "./lib/imagewriter/imagewriter.h",
"lib/layout.h": "./lib/layout.h",
"lib/ldbs.h": "./lib/ldbs.h",
"lib/logger.h": "./lib/logger.h",
"lib/proto.h": "./lib/proto.h",
"lib/readerwriter.h": "./lib/readerwriter.h",
"lib/sector.h": "./lib/sector.h",
"lib/usb/applesauce.h": "./lib/usb/applesauce.h",
"lib/usb/greaseweazle.h": "./lib/usb/greaseweazle.h",
"lib/usb/usb.h": "./lib/usb/usb.h",
@@ -197,8 +180,9 @@ cxxlibrary(
"dep/hfsutils",
"dep/libusbp",
"dep/stb",
"lib+config_proto_lib",
"lib/core",
"lib/config",
"lib/data",
"lib/fluxsource+proto_lib",
],
)

View File

@@ -186,7 +186,6 @@ def libraryimpl(
name=f"{self.localname}_hdr",
ins=ins,
outs=outs,
deps=deps,
commands=cs,
label="CHEADERS",
)

View File

@@ -15,4 +15,5 @@ clibrary(
"ffconf.h": "./source/ffconf.h",
"diskio.h": "./source/diskio.h",
},
cflags=["-Wno-pointer-sign"],
)

View File

@@ -22,4 +22,5 @@ clibrary(
"libhfs.h": "./libhfs/libhfs.h",
"os.h": "./libhfs/os.h",
},
cflags=["-Wno-pointer-sign"],
)

View File

@@ -60,7 +60,11 @@ else:
clibrary(
name="libusbp",
srcs=srcs,
cflags=["-Idep/libusbp/include", "-Idep/libusbp/src"],
cflags=[
"-Idep/libusbp/include",
"-Idep/libusbp/src",
"-Wno-deprecated-declarations",
],
caller_ldflags=ldflags,
deps=deps,
hdrs={

View File

@@ -25,38 +25,3 @@ protocc(
srcs=[".+drive_proto"],
deps=[".+common_proto_lib", "+fl2_proto_lib", ".+layout_proto_lib"],
)
proto(
name="config_proto",
srcs=["./config.proto"],
deps=[
".+common_proto",
".+layout_proto",
".+drive_proto",
"+fl2_proto",
"lib/fluxsource+proto",
"lib/fluxsink+proto",
"lib/vfs+proto",
"lib/usb+proto",
"lib/encoders+proto",
"lib/decoders+proto",
"lib/imagereader+proto",
"lib/imagewriter+proto",
],
)
protocc(
name="config_proto_lib",
srcs=[".+common_proto", ".+config_proto", "arch+proto", "+fl2_proto"],
deps=[
"lib/fluxsource+proto_lib",
"lib/fluxsink+proto_lib",
"lib/vfs+proto_lib",
"lib/usb+proto_lib",
"lib/encoders+proto_lib",
"lib/decoders+proto_lib",
"lib/imagereader+proto_lib",
"lib/imagewriter+proto_lib",
"lib+drive_proto_lib",
],
)

56
lib/config/build.py Normal file
View File

@@ -0,0 +1,56 @@
from build.c import cxxlibrary
from build.protobuf import proto, protocc
proto(
name="proto",
srcs=["./config.proto"],
deps=[
"lib+common_proto",
"lib+layout_proto",
"lib+drive_proto",
"+fl2_proto",
"lib/fluxsource+proto",
"lib/fluxsink+proto",
"lib/vfs+proto",
"lib/usb+proto",
"lib/encoders+proto",
"lib/decoders+proto",
"lib/imagereader+proto",
"lib/imagewriter+proto",
],
)
protocc(
name="proto_lib",
srcs=[".+proto", "arch+proto", "+fl2_proto"],
deps=[
"lib/fluxsource+proto_lib",
"lib/fluxsink+proto_lib",
"lib/vfs+proto_lib",
"lib/usb+proto_lib",
"lib/encoders+proto_lib",
"lib/decoders+proto_lib",
"lib/imagereader+proto_lib",
"lib/imagewriter+proto_lib",
"lib+drive_proto_lib",
],
)
cxxlibrary(
name="config",
srcs=[
"./config.cc",
"./proto.cc",
"./flags.cc",
],
hdrs={
"lib/config/config.h": "./config.h",
"lib/config/proto.h": "./proto.h",
"lib/config/flags.h": "./flags.h",
},
deps=[
"lib/core",
".+proto_lib",
"+fmt_lib",
],
)

View File

@@ -1,14 +1,8 @@
#include "lib/core/globals.h"
#include "lib/config.h"
#include "lib/proto.h"
#include "lib/logger.h"
#include "lib/config/config.h"
#include "lib/config/proto.h"
#include "lib/core/logger.h"
#include "lib/core/utils.h"
#include "lib/imagewriter/imagewriter.h"
#include "lib/imagereader/imagereader.h"
#include "lib/fluxsink/fluxsink.h"
#include "lib/fluxsource/fluxsource.h"
#include "lib/encoders/encoders.h"
#include "lib/decoders/decoders.h"
#include <fstream>
#include <google/protobuf/text_format.h>
@@ -166,6 +160,16 @@ static const std::vector<ImageConstructor> imageConstructors = {
{".xdf", IMAGETYPE_IMG, MODE_RW},
};
struct OptionLogMessage
{
std::string message;
};
void renderLogMessage(LogRenderer& r, std::shared_ptr<const OptionLogMessage> m)
{
r.newline().add("OPTION:").add(m->message).newline();
}
Config& globalConfig()
{
return config;
@@ -211,24 +215,10 @@ ConfigProto* Config::combined()
_combinedConfig.MergeFrom(_overridesConfig);
/* At this point the config is mostly valid. We're about to make calls
* that will want to call combined() reentrantly, so to prevent infinite
* loop we mark the config as valid now. */
/* At this point the config is valid, although when fluxsources or
* imagereaders are loaded it may be adjusted again. */
_configValid = true;
/* We should now be more or less done, but we still need to add in any
* config contributed by the flux source and image readers. This will
* open the files. */
if (hasFluxSource())
_combinedConfig.MergeFrom(getFluxSource()->getExtraConfig());
if (hasImageReader())
_combinedConfig.MergeFrom(getImageReader()->getExtraConfig());
/* Merge in the overrides once again. */
_combinedConfig.MergeFrom(_overridesConfig);
}
return &_combinedConfig;
}
@@ -244,11 +234,6 @@ void Config::clear()
_baseConfig.Clear();
_overridesConfig.Clear();
_combinedConfig.Clear();
_fluxSource.reset();
_verificationFluxSource.reset();
_imageReader.reset();
_encoder.reset();
_decoder.reset();
_appliedOptions.clear();
}
@@ -467,8 +452,8 @@ bool Config::isOptionValid(std::string option)
void Config::applyOption(const OptionProto& option)
{
log("OPTION: {}",
option.has_message() ? option.message() : option.comment());
log(OptionLogMessage{
option.has_message() ? option.message() : option.comment()});
_appliedOptions.insert(option.name());
}
@@ -581,115 +566,36 @@ bool Config::hasFluxSource()
return (*this)->flux_source().type() != FLUXTYPE_NOT_SET;
}
std::shared_ptr<FluxSource>& Config::getFluxSource()
{
if (!_fluxSource)
{
if (!hasFluxSource())
error("no flux source configured");
_fluxSource =
std::shared_ptr(FluxSource::create((*this)->flux_source()));
}
return _fluxSource;
}
bool Config::hasVerificationFluxSource() const
{
return _verificationFluxSourceProto.type() != FLUXTYPE_NOT_SET;
}
std::shared_ptr<FluxSource>& Config::getVerificationFluxSource()
{
if (!_verificationFluxSource)
{
if (!hasVerificationFluxSource())
error("no verification flux source configured");
_verificationFluxSource =
std::shared_ptr(FluxSource::create(_verificationFluxSourceProto));
}
return _verificationFluxSource;
}
bool Config::hasImageReader()
{
return (*this)->image_reader().type() != IMAGETYPE_NOT_SET;
}
std::shared_ptr<ImageReader>& Config::getImageReader()
{
if (!_imageReader)
{
if (!hasImageReader())
error("no image reader configured");
_imageReader =
std::shared_ptr(ImageReader::create((*this)->image_reader()));
}
return _imageReader;
}
bool Config::hasFluxSink()
{
return (*this)->flux_sink().type() != FLUXTYPE_NOT_SET;
}
std::unique_ptr<FluxSink> Config::getFluxSink()
{
if (!hasFluxSink())
error("no flux sink configured");
return FluxSink::create((*this)->flux_sink());
}
bool Config::hasImageWriter()
{
return (*this)->image_writer().type() != IMAGETYPE_NOT_SET;
}
std::unique_ptr<ImageWriter> Config::getImageWriter()
{
if (!hasImageWriter())
error("no image writer configured");
return ImageWriter::create((*this)->image_writer());
}
bool Config::hasEncoder()
{
return (*this)->has_encoder();
}
std::shared_ptr<Encoder>& Config::getEncoder()
{
if (!_encoder)
{
if (!hasEncoder())
error("no encoder configured");
_encoder = Encoder::create((*this)->encoder());
}
return _encoder;
}
bool Config::hasDecoder()
{
return _combinedConfig.has_decoder();
}
std::shared_ptr<Decoder>& Config::getDecoder()
{
if (!_decoder)
{
if (!hasDecoder())
error("no decoder configured");
_decoder = Decoder::create((*this)->decoder());
}
return _decoder;
}
const std::vector<FluxConstructor>& Config::getFluxFormats()
{
return fluxConstructors;

View File

@@ -3,7 +3,7 @@
#ifdef __cplusplus
#include <google/protobuf/message.h>
#include "lib/config.pb.h"
#include "lib/config/config.pb.h"
#include "lib/common.pb.h"
class ConfigProto;
@@ -141,28 +141,21 @@ public:
void setImageReader(std::string value);
void setImageWriter(std::string value);
/* Fetch the sources, opening them if necessary. */
/* Query useful things about the config. */
bool hasFluxSource();
std::shared_ptr<FluxSource>& getFluxSource();
bool hasImageReader();
std::shared_ptr<ImageReader>& getImageReader();
bool hasVerificationFluxSource() const;
std::shared_ptr<FluxSource>& getVerificationFluxSource();
/* Fetch the encoder and decoder, creating them if necessary. */
const FluxSourceProto& getVerificationFluxSourceProto() const
{
return _verificationFluxSourceProto;
}
bool hasEncoder();
std::shared_ptr<Encoder>& getEncoder();
bool hasDecoder();
std::shared_ptr<Decoder>& getDecoder();
/* Create the sinks: these are not cached. */
bool hasFluxSink();
std::unique_ptr<FluxSink> getFluxSink();
bool hasImageWriter();
std::unique_ptr<ImageWriter> getImageWriter();
public:
static const std::vector<FluxConstructor>& getFluxFormats();
@@ -175,11 +168,6 @@ private:
std::set<std::string> _appliedOptions;
bool _configValid;
std::shared_ptr<FluxSource> _fluxSource;
std::shared_ptr<ImageReader> _imageReader;
std::shared_ptr<FluxSource> _verificationFluxSource;
std::shared_ptr<Encoder> _encoder;
std::shared_ptr<Decoder> _decoder;
FluxSourceProto _verificationFluxSourceProto;
};

View File

@@ -1,11 +1,9 @@
#include "lib/core/globals.h"
#include "lib/config.h"
#include "lib/flags.h"
#include "lib/proto.h"
#include "lib/config/config.h"
#include "lib/config/flags.h"
#include "lib/config/proto.h"
#include "lib/core/utils.h"
#include "lib/logger.h"
#include "lib/fluxsource/fluxsource.h"
#include "lib/imagereader/imagereader.h"
#include "lib/core/logger.h"
#include <google/protobuf/text_format.h>
#include <regex>
#include <fstream>

View File

View File

@@ -1,5 +1,5 @@
#include "lib/core/globals.h"
#include "lib/proto.h"
#include "lib/config/proto.h"
#include "lib/common.pb.h"
#include <regex>

View File

@@ -3,7 +3,7 @@
#include <google/protobuf/message.h>
#include "lib/common.pb.h"
#include "lib/config.pb.h"
#include "lib/config/config.pb.h"
class ProtoPathNotFoundException : public ErrorException
{

View File

@@ -9,6 +9,8 @@ cxxlibrary(
"./csvreader.cc",
"./hexdump.cc",
"./utils.cc",
"./logger.cc",
"./logrenderer.cc",
],
hdrs={
"lib/core/bitmap.h": "./bitmap.h",
@@ -17,6 +19,7 @@ cxxlibrary(
"lib/core/csvreader.h": "./csvreader.h",
"lib/core/globals.h": "./globals.h",
"lib/core/utils.h": "./utils.h",
"lib/core/logger.h": "./logger.h",
},
deps=[
"dep/agg",

56
lib/core/logger.cc Normal file
View File

@@ -0,0 +1,56 @@
#include "lib/core/globals.h"
#include "lib/core/bytes.h"
#include "lib/core/logger.h"
static bool indented = false;
static std::function<void(const AnyLogMessage&)> loggerImpl =
[](const auto& message)
{
static auto r = LogRenderer::create(std::cout);
r->add(message);
};
void log(const char* m)
{
log(std::string(m));
}
void log(const AnyLogMessage& message)
{
loggerImpl(message);
}
void Logger::setLogger(std::function<void(const AnyLogMessage&)> cb)
{
loggerImpl = cb;
}
void renderLogMessage(
LogRenderer& r, std::shared_ptr<const ErrorLogMessage> msg)
{
r.newline().add("Error:").add(msg->message).newline();
}
void renderLogMessage(
LogRenderer& r, std::shared_ptr<const EmergencyStopMessage> msg)
{
r.newline().add("Stop!").newline();
}
void renderLogMessage(LogRenderer& r, std::shared_ptr<const std::string> msg)
{
r.newline().add(*msg).newline();
}
LogRenderer& LogRenderer::add(const AnyLogMessage& message)
{
std::visit(
[&](const auto& arg)
{
renderLogMessage(*this, arg);
},
message);
return *this;
}

119
lib/core/logger.h Normal file
View File

@@ -0,0 +1,119 @@
#ifndef LOGGER_H
#define LOGGER_H
#include "fmt/format.h"
#include <type_traits>
class DiskFlux;
class TrackDataFlux;
class TrackFlux;
class Sector;
class LogRenderer;
struct ErrorLogMessage;
struct EmergencyStopMessage;
struct BeginSpeedOperationLogMessage;
struct EndSpeedOperationLogMessage;
struct TrackReadLogMessage;
struct DiskReadLogMessage;
struct BeginReadOperationLogMessage;
struct EndReadOperationLogMessage;
struct BeginWriteOperationLogMessage;
struct EndWriteOperationLogMessage;
struct BeginOperationLogMessage;
struct EndOperationLogMessage;
struct OperationProgressLogMessage;
struct OptionLogMessage;
struct ErrorLogMessage
{
std::string message;
};
struct EmergencyStopMessage
{
};
extern void renderLogMessage(
LogRenderer& r, std::shared_ptr<const ErrorLogMessage> m);
extern void renderLogMessage(
LogRenderer& r, std::shared_ptr<const EmergencyStopMessage> m);
extern void renderLogMessage(
LogRenderer& r, std::shared_ptr<const TrackReadLogMessage> m);
extern void renderLogMessage(
LogRenderer& r, std::shared_ptr<const DiskReadLogMessage> m);
extern void renderLogMessage(
LogRenderer& r, std::shared_ptr<const BeginSpeedOperationLogMessage> m);
extern void renderLogMessage(
LogRenderer& r, std::shared_ptr<const EndSpeedOperationLogMessage> m);
extern void renderLogMessage(
LogRenderer& r, std::shared_ptr<const BeginReadOperationLogMessage> m);
extern void renderLogMessage(
LogRenderer& r, std::shared_ptr<const EndReadOperationLogMessage> m);
extern void renderLogMessage(
LogRenderer& r, std::shared_ptr<const BeginWriteOperationLogMessage> m);
extern void renderLogMessage(
LogRenderer& r, std::shared_ptr<const EndWriteOperationLogMessage> m);
extern void renderLogMessage(
LogRenderer& r, std::shared_ptr<const BeginOperationLogMessage> m);
extern void renderLogMessage(
LogRenderer& r, std::shared_ptr<const EndOperationLogMessage> m);
extern void renderLogMessage(
LogRenderer& r, std::shared_ptr<const OperationProgressLogMessage> m);
extern void renderLogMessage(
LogRenderer& r, std::shared_ptr<const OptionLogMessage> m);
typedef std::variant<std::shared_ptr<const std::string>,
std::shared_ptr<const ErrorLogMessage>,
std::shared_ptr<const EmergencyStopMessage>,
std::shared_ptr<const TrackReadLogMessage>,
std::shared_ptr<const DiskReadLogMessage>,
std::shared_ptr<const BeginSpeedOperationLogMessage>,
std::shared_ptr<const EndSpeedOperationLogMessage>,
std::shared_ptr<const BeginReadOperationLogMessage>,
std::shared_ptr<const EndReadOperationLogMessage>,
std::shared_ptr<const BeginWriteOperationLogMessage>,
std::shared_ptr<const EndWriteOperationLogMessage>,
std::shared_ptr<const BeginOperationLogMessage>,
std::shared_ptr<const EndOperationLogMessage>,
std::shared_ptr<const OperationProgressLogMessage>,
std::shared_ptr<const OptionLogMessage>>
AnyLogMessage;
extern void log(const char* ptr);
extern void log(const AnyLogMessage& message);
template <class T>
inline void log(const T& message)
{
log(AnyLogMessage(std::make_shared<T>(message)));
}
template <typename... Args>
inline void log(fmt::string_view fstr, const Args&... args)
{
log(fmt::format(fstr, args...));
}
class LogRenderer
{
public:
static std::unique_ptr<LogRenderer> create(std::ostream& stream);
virtual ~LogRenderer() {}
public:
LogRenderer& add(const AnyLogMessage& message);
public:
virtual LogRenderer& add(const std::string& m) = 0;
virtual LogRenderer& comma() = 0;
virtual LogRenderer& header(const std::string& h) = 0;
virtual LogRenderer& newline() = 0;
};
namespace Logger
{
extern void setLogger(std::function<void(const AnyLogMessage&)> cb);
}
#endif

95
lib/core/logrenderer.cc Normal file
View File

@@ -0,0 +1,95 @@
#include "lib/core/globals.h"
#include "lib/core/bytes.h"
#include "lib/core/logger.h"
namespace
{
class LogRendererImpl : public LogRenderer
{
public:
LogRendererImpl(std::ostream& stream): _stream(stream) {}
private:
void indent()
{
_stream << " ";
_lineLen = 7;
_space = true;
}
public:
LogRenderer& add(const std::string& m) override
{
if (_newline && !_header)
indent();
if (!_space)
{
_stream << ' ';
_lineLen++;
}
_newline = false;
_header = false;
_lineLen += m.size();
if (_lineLen >= 80)
{
_stream << '\n';
indent();
}
_stream << m;
_space = !m.empty() && isspace(m[m.size() - 1]);
return *this;
}
LogRenderer& header(const std::string& m) override
{
if (!_newline)
_stream << '\n';
_stream << m;
_lineLen = m.size();
_header = true;
_newline = true;
_space = !m.empty() && isspace(m[m.size() - 1]);
return *this;
}
LogRenderer& comma() override
{
if (!_newline || _header)
{
_stream << ';';
_space = false;
}
return *this;
}
LogRenderer& newline() override
{
if (!_header)
{
if (!_newline)
_stream << '\n';
_lineLen = 0;
_header = false;
_newline = true;
_space = true;
}
return *this;
}
private:
bool _header = false;
bool _newline = false;
bool _space = false;
int _lineLen = 0;
std::ostream& _stream;
};
}
std::unique_ptr<LogRenderer> LogRenderer::create(std::ostream& stream)
{
return std::make_unique<LogRendererImpl>(stream);
}

View File

@@ -233,4 +233,3 @@ int findLowestSetBit(uint64_t value)
}
return bit;
}

14
lib/data/build.py Normal file
View File

@@ -0,0 +1,14 @@
from build.c import cxxlibrary
cxxlibrary(
name="data",
srcs=["./fluxmap.cc", "./sector.cc", "./layout.cc", "./image.cc"],
hdrs={
"lib/data/flux.h": "./flux.h",
"lib/data/fluxmap.h": "./fluxmap.h",
"lib/data/sector.h": "./sector.h",
"lib/data/layout.h": "./layout.h",
"lib/data/image.h": "./image.h",
},
deps=["lib/core", "lib/config", "+protocol"],
)

View File

77
lib/data/fluxmap.cc Normal file
View File

@@ -0,0 +1,77 @@
#include "lib/core/globals.h"
#include "lib/data/fluxmap.h"
#include "protocol.h"
Fluxmap& Fluxmap::appendBytes(const Bytes& bytes)
{
if (bytes.size() == 0)
return *this;
return appendBytes(&bytes[0], bytes.size());
}
Fluxmap& Fluxmap::appendBytes(const uint8_t* ptr, size_t len)
{
ByteWriter bw(_bytes);
bw.seekToEnd();
while (len--)
{
uint8_t byte = *ptr++;
_ticks += byte & 0x3f;
bw.write_8(byte);
}
_duration = _ticks * NS_PER_TICK;
return *this;
}
uint8_t& Fluxmap::findLastByte()
{
if (_bytes.empty())
appendByte(0x00);
return *(_bytes.end() - 1);
}
Fluxmap& Fluxmap::appendInterval(uint32_t ticks)
{
while (ticks >= 0x3f)
{
appendByte(0x3f);
ticks -= 0x3f;
}
appendByte((uint8_t)ticks);
return *this;
}
Fluxmap& Fluxmap::appendPulse()
{
findLastByte() |= 0x80;
return *this;
}
Fluxmap& Fluxmap::appendIndex()
{
findLastByte() |= 0x40;
return *this;
}
Fluxmap& Fluxmap::appendDesync()
{
appendByte(F_DESYNC);
return *this;
}
std::vector<std::unique_ptr<const Fluxmap>> Fluxmap::split() const
{
std::vector<std::unique_ptr<const Fluxmap>> maps;
auto bytesVector = rawBytes().split(F_DESYNC);
for (auto bytes : bytesVector)
{
if (bytes.size() != 0)
maps.push_back(std::move(std::make_unique<Fluxmap>(bytes)));
}
return maps;
}

View File

@@ -83,19 +83,6 @@ public:
int threshold_ticks, int amount_ticks);
std::vector<std::unique_ptr<const Fluxmap>> split() const;
struct ClockData
{
nanoseconds_t median;
uint32_t noiseFloor;
uint32_t signalLevel;
nanoseconds_t peakStart;
nanoseconds_t peakEnd;
uint32_t buckets[256];
};
ClockData guessClock(
double noiseFloorFactor = 0.01, double signalLevelFactor = 0.05) const;
private:
uint8_t& findLastByte();

View File

@@ -1,7 +1,7 @@
#include "lib/core/globals.h"
#include "lib/sector.h"
#include "lib/image.h"
#include "lib/layout.h"
#include "lib/data/sector.h"
#include "lib/data/image.h"
#include "lib/data/layout.h"
Image::Image() {}

View File

View File

@@ -1,9 +1,8 @@
#include "lib/core/globals.h"
#include "lib/config.h"
#include "lib/layout.h"
#include "lib/proto.h"
#include "lib/logger.h"
#include "lib/fl2.h"
#include "lib/config/config.h"
#include "lib/data/layout.h"
#include "lib/config/proto.h"
#include "lib/core/logger.h"
static unsigned getTrackStep()
{

View File

@@ -1,7 +1,7 @@
#ifndef LAYOUT_H
#define LAYOUT_H
#include "lib/flux.h"
#include "lib/data/flux.h"
class SectorListProto;
class TrackInfo;

View File

@@ -1,7 +1,7 @@
#include "lib/core/globals.h"
#include "lib/flux.h"
#include "lib/sector.h"
#include "lib/layout.h"
#include "lib/data/flux.h"
#include "lib/data/sector.h"
#include "lib/data/layout.h"
Sector::Sector(const LogicalLocation& location):
LogicalLocation(location),

View File

@@ -2,7 +2,7 @@
#define SECTOR_H
#include "lib/core/bytes.h"
#include "lib/fluxmap.h"
#include "lib/data/fluxmap.h"
class Record;
class TrackInfo;

View File

@@ -1,6 +1,7 @@
#include "lib/core/globals.h"
#include "lib/flags.h"
#include "lib/fluxmap.h"
#include "lib/config/flags.h"
#include "lib/data/fluxmap.h"
#include "lib/config/config.h"
#include "lib/decoders/decoders.h"
#include "lib/encoders/encoders.h"
#include "arch/agat/agat.h"
@@ -23,15 +24,22 @@
#include "arch/victor9k/victor9k.h"
#include "arch/zilogmcz/zilogmcz.h"
#include "lib/decoders/fluxmapreader.h"
#include "lib/flux.h"
#include "lib/data/flux.h"
#include "protocol.h"
#include "lib/decoders/rawbits.h"
#include "lib/sector.h"
#include "lib/image.h"
#include "lib/data/sector.h"
#include "lib/data/image.h"
#include "lib/decoders/decoders.pb.h"
#include "lib/layout.h"
#include "lib/data/layout.h"
#include <numeric>
std::unique_ptr<Decoder> Decoder::create(Config& config)
{
if (!config.hasDecoder())
error("no decoder configured");
return create(config->decoder());
}
std::unique_ptr<Decoder> Decoder::create(const DecoderProto& config)
{
static const std::map<int,

View File

@@ -2,7 +2,7 @@
#define DECODERS_H
#include "lib/core/bytes.h"
#include "lib/sector.h"
#include "lib/data/sector.h"
#include "lib/decoders/fluxmapreader.h"
#include "lib/decoders/fluxdecoder.h"
@@ -12,8 +12,9 @@ class FluxMatcher;
class FluxmapReader;
class RawBits;
class DecoderProto;
class Config;
#include "lib/flux.h"
#include "lib/data/flux.h"
extern void setDecoderManualClockRate(double clockrate_us);
@@ -39,6 +40,7 @@ public:
virtual ~Decoder() {}
static std::unique_ptr<Decoder> create(Config& config);
static std::unique_ptr<Decoder> create(const DecoderProto& config);
public:

View File

@@ -1,5 +1,5 @@
#include "lib/core/globals.h"
#include "lib/fluxmap.h"
#include "lib/data/fluxmap.h"
#include "lib/decoders/fluxmapreader.h"
#include "lib/decoders/fluxdecoder.h"
#include "lib/decoders/decoders.pb.h"

View File

@@ -1,9 +1,9 @@
#include "lib/core/globals.h"
#include "lib/config.h"
#include "lib/fluxmap.h"
#include "lib/config/config.h"
#include "lib/data/fluxmap.h"
#include "lib/decoders/fluxmapreader.h"
#include "lib/decoders/fluxpattern.h"
#include "lib/proto.h"
#include "lib/config/proto.h"
#include "protocol.h"
#include <numeric>
#include <math.h>
@@ -166,3 +166,87 @@ void FluxmapReader::seekToIndexMark()
skipToEvent(F_BIT_INDEX);
_pos.zeroes = 0;
}
/*
* Tries to guess the clock by finding the smallest common interval.
* Returns nanoseconds.
*/
FluxmapReader::ClockData FluxmapReader::guessClock(
double noiseFloorFactor, double signalLevelFactor)
{
ClockData data = {};
while (!eof())
{
unsigned interval;
findEvent(F_BIT_PULSE, interval);
if (interval > 0xff)
continue;
data.buckets[interval]++;
}
uint32_t max =
*std::max_element(std::begin(data.buckets), std::end(data.buckets));
uint32_t min =
*std::min_element(std::begin(data.buckets), std::end(data.buckets));
data.noiseFloor = min + (max - min) * noiseFloorFactor;
data.signalLevel = min + (max - min) * signalLevelFactor;
/* Find a point solidly within the first pulse. */
int pulseindex = 0;
while (pulseindex < 256)
{
if (data.buckets[pulseindex] > data.signalLevel)
break;
pulseindex++;
}
if (pulseindex == -1)
return data;
/* Find the upper and lower bounds of the pulse. */
int peaklo = pulseindex;
while (peaklo > 0)
{
if (data.buckets[peaklo] < data.noiseFloor)
break;
peaklo--;
}
int peakhi = pulseindex;
while (peakhi < 255)
{
if (data.buckets[peakhi] < data.noiseFloor)
break;
peakhi++;
}
/* Find the total accumulated size of the pulse. */
uint32_t total_size = 0;
for (int i = peaklo; i < peakhi; i++)
total_size += data.buckets[i];
/* Now find the median. */
uint32_t count = 0;
int median = peaklo;
while (median < peakhi)
{
count += data.buckets[median];
if (count > (total_size / 2))
break;
median++;
}
/*
* Okay, the median should now be a good candidate for the (or a) clock.
* How this maps onto the actual clock rate depends on the encoding.
*/
data.peakStart = peaklo * NS_PER_TICK;
data.peakEnd = peakhi * NS_PER_TICK;
data.median = median * NS_PER_TICK;
return data;
}

View File

@@ -1,8 +1,8 @@
#ifndef FLUXMAPREADER_H
#define FLUXMAPREADER_H
#include "lib/fluxmap.h"
#include "lib/flags.h"
#include "lib/data/fluxmap.h"
#include "lib/config/flags.h"
#include "protocol.h"
class DecoderProto;
@@ -56,6 +56,19 @@ public:
nanoseconds_t seekToPattern(
const FluxMatcher& pattern, const FluxMatcher*& matching);
struct ClockData
{
nanoseconds_t median;
uint32_t noiseFloor;
uint32_t signalLevel;
nanoseconds_t peakStart;
nanoseconds_t peakEnd;
uint32_t buckets[256];
};
ClockData guessClock(
double noiseFloorFactor = 0.01, double signalLevelFactor = 0.05);
private:
const Fluxmap& _fluxmap;
const uint8_t* _bytes;

View File

@@ -1,8 +1,8 @@
#include "lib/core/globals.h"
#include "lib/config.h"
#include "lib/fluxmap.h"
#include "lib/config/config.h"
#include "lib/data/fluxmap.h"
#include "lib/decoders/fluxpattern.h"
#include "lib/proto.h"
#include "lib/config/proto.h"
#include "protocol.h"
#include <numeric>
#include <math.h>

View File

@@ -1,8 +1,8 @@
#pragma once
#include "lib/core/utils.h"
#include "lib/fluxmap.h"
#include "lib/flags.h"
#include "lib/data/fluxmap.h"
#include "lib/config/flags.h"
#include "protocol.h"
class FluxMatcher;

View File

@@ -1,6 +1,6 @@
#include "lib/core/globals.h"
#include "lib/config.h"
#include "lib/fluxmap.h"
#include "lib/config/config.h"
#include "lib/data/fluxmap.h"
#include "lib/decoders/decoders.h"
#include "lib/encoders/encoders.h"
#include "arch/agat/agat.h"
@@ -16,11 +16,18 @@
#include "arch/tids990/tids990.h"
#include "arch/victor9k/victor9k.h"
#include "lib/encoders/encoders.pb.h"
#include "lib/proto.h"
#include "lib/layout.h"
#include "lib/image.h"
#include "lib/config/proto.h"
#include "lib/data/layout.h"
#include "lib/data/image.h"
#include "protocol.h"
std::unique_ptr<Encoder> Encoder::create(Config& config)
{
if (!config.hasEncoder())
error("no encoder configured");
return create(config->encoder());
}
std::unique_ptr<Encoder> Encoder::create(const EncoderProto& config)
{
static const std::map<int,

View File

@@ -7,6 +7,7 @@ class Image;
class Layout;
class Sector;
class TrackInfo;
class Config;
class Encoder
{
@@ -14,6 +15,7 @@ public:
Encoder(const EncoderProto& config) {}
virtual ~Encoder() {}
static std::unique_ptr<Encoder> create(Config& config);
static std::unique_ptr<Encoder> create(const EncoderProto& config);
public:

View File

@@ -1,6 +1,6 @@
#include "lib/core/globals.h"
#include "lib/proto.h"
#include "lib/fluxmap.h"
#include "lib/config/proto.h"
#include "lib/data/fluxmap.h"
#include "lib/fl2.pb.h"
#include <fstream>

View File

@@ -1,164 +0,0 @@
#include "lib/core/globals.h"
#include "lib/fluxmap.h"
#include "lib/decoders/fluxmapreader.h"
#include "protocol.h"
Fluxmap& Fluxmap::appendBytes(const Bytes& bytes)
{
if (bytes.size() == 0)
return *this;
return appendBytes(&bytes[0], bytes.size());
}
Fluxmap& Fluxmap::appendBytes(const uint8_t* ptr, size_t len)
{
ByteWriter bw(_bytes);
bw.seekToEnd();
while (len--)
{
uint8_t byte = *ptr++;
_ticks += byte & 0x3f;
bw.write_8(byte);
}
_duration = _ticks * NS_PER_TICK;
return *this;
}
uint8_t& Fluxmap::findLastByte()
{
if (_bytes.empty())
appendByte(0x00);
return *(_bytes.end() - 1);
}
Fluxmap& Fluxmap::appendInterval(uint32_t ticks)
{
while (ticks >= 0x3f)
{
appendByte(0x3f);
ticks -= 0x3f;
}
appendByte((uint8_t)ticks);
return *this;
}
Fluxmap& Fluxmap::appendPulse()
{
findLastByte() |= 0x80;
return *this;
}
Fluxmap& Fluxmap::appendIndex()
{
findLastByte() |= 0x40;
return *this;
}
Fluxmap& Fluxmap::appendDesync()
{
appendByte(F_DESYNC);
return *this;
}
std::vector<std::unique_ptr<const Fluxmap>> Fluxmap::split() const
{
std::vector<std::unique_ptr<const Fluxmap>> maps;
auto bytesVector = rawBytes().split(F_DESYNC);
for (auto bytes : bytesVector)
{
if (bytes.size() != 0)
maps.push_back(std::move(std::make_unique<Fluxmap>(bytes)));
}
return maps;
}
/*
* Tries to guess the clock by finding the smallest common interval.
* Returns nanoseconds.
*/
Fluxmap::ClockData Fluxmap::guessClock(
double noiseFloorFactor, double signalLevelFactor) const
{
ClockData data = {};
FluxmapReader fr(*this);
while (!fr.eof())
{
unsigned interval;
fr.findEvent(F_BIT_PULSE, interval);
if (interval > 0xff)
continue;
data.buckets[interval]++;
}
uint32_t max =
*std::max_element(std::begin(data.buckets), std::end(data.buckets));
uint32_t min =
*std::min_element(std::begin(data.buckets), std::end(data.buckets));
data.noiseFloor = min + (max - min) * noiseFloorFactor;
data.signalLevel = min + (max - min) * signalLevelFactor;
/* Find a point solidly within the first pulse. */
int pulseindex = 0;
while (pulseindex < 256)
{
if (data.buckets[pulseindex] > data.signalLevel)
break;
pulseindex++;
}
if (pulseindex == -1)
return data;
/* Find the upper and lower bounds of the pulse. */
int peaklo = pulseindex;
while (peaklo > 0)
{
if (data.buckets[peaklo] < data.noiseFloor)
break;
peaklo--;
}
int peakhi = pulseindex;
while (peakhi < 255)
{
if (data.buckets[peakhi] < data.noiseFloor)
break;
peakhi++;
}
/* Find the total accumulated size of the pulse. */
uint32_t total_size = 0;
for (int i = peaklo; i < peakhi; i++)
total_size += data.buckets[i];
/* Now find the median. */
uint32_t count = 0;
int median = peaklo;
while (median < peakhi)
{
count += data.buckets[median];
if (count > (total_size / 2))
break;
median++;
}
/*
* Okay, the median should now be a good candidate for the (or a) clock.
* How this maps onto the actual clock rate depends on the encoding.
*/
data.peakStart = peaklo * NS_PER_TICK;
data.peakEnd = peakhi * NS_PER_TICK;
data.median = median * NS_PER_TICK;
return data;
}

View File

@@ -1,15 +1,15 @@
#include "lib/core/globals.h"
#include "lib/flags.h"
#include "lib/fluxmap.h"
#include "lib/config/flags.h"
#include "lib/data/fluxmap.h"
#include "lib/core/bytes.h"
#include "protocol.h"
#include "lib/fluxsink/fluxsink.h"
#include "lib/decoders/fluxmapreader.h"
#include "lib/fluxsink/fluxsink.pb.h"
#include "lib/logger.h"
#include "lib/proto.h"
#include "lib/fluxmap.h"
#include "lib/layout.h"
#include "lib/core/logger.h"
#include "lib/config/proto.h"
#include "lib/data/fluxmap.h"
#include "lib/data/layout.h"
#include "lib/a2r.h"
#include <fstream>
#include <sys/stat.h>

View File

@@ -1,12 +1,12 @@
#include "lib/core/globals.h"
#include "lib/flags.h"
#include "lib/fluxmap.h"
#include "lib/config/flags.h"
#include "lib/data/fluxmap.h"
#include "lib/core/bytes.h"
#include "protocol.h"
#include "lib/fluxsink/fluxsink.h"
#include "lib/decoders/fluxmapreader.h"
#include "lib/fluxsink/fluxsink.pb.h"
#include "lib/proto.h"
#include "lib/config/proto.h"
#include <fstream>
#include <sys/stat.h>
#include <sys/types.h>

View File

@@ -1,13 +1,13 @@
#include "lib/core/globals.h"
#include "lib/config.h"
#include "lib/flags.h"
#include "lib/fluxmap.h"
#include "lib/config/config.h"
#include "lib/config/flags.h"
#include "lib/data/fluxmap.h"
#include "lib/core/bytes.h"
#include "protocol.h"
#include "lib/fluxsink/fluxsink.h"
#include "lib/decoders/fluxmapreader.h"
#include "lib/fluxsink/fluxsink.pb.h"
#include "lib/proto.h"
#include "lib/config/proto.h"
#include "lib/fl2.pb.h"
#include "lib/fl2.h"
#include <fstream>

View File

@@ -1,11 +1,19 @@
#include "lib/core/globals.h"
#include "lib/flags.h"
#include "lib/config/flags.h"
#include "lib/config/config.h"
#include "lib/fluxsink/fluxsink.h"
#include "lib/config.pb.h"
#include "lib/proto.h"
#include "lib/config/config.pb.h"
#include "lib/config/proto.h"
#include "lib/core/utils.h"
#include <regex>
std::unique_ptr<FluxSink> FluxSink::create(Config& config)
{
if (!config.hasFluxSink())
error("no flux sink configured");
return create(config->flux_sink());
}
std::unique_ptr<FluxSink> FluxSink::create(const FluxSinkProto& config)
{
switch (config.type())

View File

@@ -1,7 +1,7 @@
#ifndef FLUXSINK_H
#define FLUXSINK_H
#include "lib/flags.h"
#include "lib/config/flags.h"
#include <ostream>
class Fluxmap;
@@ -12,6 +12,7 @@ class A2RFluxSinkProto;
class VcdFluxSinkProto;
class ScpFluxSinkProto;
class Fl2FluxSinkProto;
class Config;
class FluxSink
{
@@ -34,6 +35,7 @@ public:
static std::unique_ptr<FluxSink> createFl2FluxSink(
const std::string& filename);
static std::unique_ptr<FluxSink> create(Config& config);
static std::unique_ptr<FluxSink> create(const FluxSinkProto& config);
public:

View File

@@ -1,9 +1,9 @@
#include "lib/core/globals.h"
#include "lib/config.h"
#include "lib/flags.h"
#include "lib/fluxmap.h"
#include "lib/logger.h"
#include "lib/proto.h"
#include "lib/config/config.h"
#include "lib/config/flags.h"
#include "lib/data/fluxmap.h"
#include "lib/core/logger.h"
#include "lib/config/proto.h"
#include "lib/usb/usb.h"
#include "lib/fluxsink/fluxsink.h"
#include "lib/fluxsink/fluxsink.pb.h"

View File

@@ -1,17 +1,17 @@
#include "lib/core/globals.h"
#include "lib/config.h"
#include "lib/flags.h"
#include "lib/fluxmap.h"
#include "lib/config/config.h"
#include "lib/config/flags.h"
#include "lib/data/fluxmap.h"
#include "lib/core/bytes.h"
#include "protocol.h"
#include "lib/fluxsink/fluxsink.h"
#include "lib/decoders/fluxmapreader.h"
#include "lib/fluxsink/fluxsink.pb.h"
#include "lib/proto.h"
#include "lib/fluxmap.h"
#include "lib/layout.h"
#include "lib/config/proto.h"
#include "lib/data/fluxmap.h"
#include "lib/data/layout.h"
#include "lib/scp.h"
#include "lib/logger.h"
#include "lib/core/logger.h"
#include <fstream>
#include <sys/stat.h>
#include <sys/types.h>

View File

@@ -1,12 +1,12 @@
#include "lib/core/globals.h"
#include "lib/flags.h"
#include "lib/fluxmap.h"
#include "lib/config/flags.h"
#include "lib/data/fluxmap.h"
#include "lib/core/bytes.h"
#include "protocol.h"
#include "lib/fluxsink/fluxsink.h"
#include "lib/decoders/fluxmapreader.h"
#include "lib/fluxsink/fluxsink.pb.h"
#include "lib/proto.h"
#include "lib/config/proto.h"
#include <fstream>
#include <sys/stat.h>
#include <sys/types.h>

View File

@@ -1,8 +1,8 @@
#include "lib/core/globals.h"
#include "lib/fluxmap.h"
#include "lib/data/fluxmap.h"
#include "lib/fluxsource/fluxsource.pb.h"
#include "lib/fluxsource/fluxsource.h"
#include "lib/proto.h"
#include "lib/config/proto.h"
#include <fstream>
struct A2Rv2Flux

View File

@@ -1,5 +1,5 @@
#include "lib/core/globals.h"
#include "lib/fluxmap.h"
#include "lib/data/fluxmap.h"
#include "lib/core/bytes.h"
#include "lib/fluxsource/catweasel.h"

View File

@@ -1,9 +1,9 @@
#include "lib/core/globals.h"
#include "lib/fluxmap.h"
#include "lib/data/fluxmap.h"
#include "lib/fluxsource/fluxsource.pb.h"
#include "lib/fluxsource/fluxsource.h"
#include "lib/fluxsource/catweasel.h"
#include "lib/proto.h"
#include "lib/config/proto.h"
#include <fstream>
struct CwfHeader

View File

@@ -1,10 +1,10 @@
#include "lib/core/globals.h"
#include "lib/fluxmap.h"
#include "lib/data/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 "lib/config/proto.h"
#include "lib/core/logger.h"
#include <fstream>
#include <filesystem>

View File

@@ -1,5 +1,5 @@
#include "lib/core/globals.h"
#include "lib/fluxmap.h"
#include "lib/data/fluxmap.h"
#include "lib/fluxsource/fluxsource.h"
#include "lib/fluxsource/fluxsource.pb.h"

View File

@@ -1,11 +1,11 @@
#include "lib/core/globals.h"
#include "lib/fluxmap.h"
#include "lib/data/fluxmap.h"
#include "lib/fluxsource/fluxsource.pb.h"
#include "lib/fl2.pb.h"
#include "lib/fluxsource/fluxsource.h"
#include "lib/proto.h"
#include "lib/config/proto.h"
#include "lib/fl2.h"
#include "lib/fluxmap.h"
#include "lib/data/fluxmap.h"
#include <fstream>
class Fl2FluxSourceIterator : public FluxSourceIterator

View File

@@ -1,11 +1,19 @@
#include "lib/core/globals.h"
#include "lib/flags.h"
#include "lib/config/config.h"
#include "lib/config/flags.h"
#include "lib/fluxsource/fluxsource.h"
#include "lib/fluxmap.h"
#include "lib/config.pb.h"
#include "lib/proto.h"
#include "lib/data/fluxmap.h"
#include "lib/config/config.pb.h"
#include "lib/config/proto.h"
#include "lib/core/utils.h"
std::unique_ptr<FluxSource> FluxSource::create(Config& config)
{
if (!config.hasFluxSource())
error("no flux source configured");
return create(config->flux_source());
}
std::unique_ptr<FluxSource> FluxSource::create(const FluxSourceProto& config)
{
switch (config.type())

View File

@@ -1,8 +1,8 @@
#ifndef FLUXSOURCE_H
#define FLUXSOURCE_H
#include "lib/flags.h"
#include "lib/config.pb.h"
#include "lib/config/flags.h"
#include "lib/config/config.pb.h"
class A2rFluxSourceProto;
class CwfFluxSourceProto;
@@ -17,6 +17,7 @@ class KryofluxFluxSourceProto;
class ScpFluxSourceProto;
class TestPatternFluxSourceProto;
class FlxFluxSourceProto;
class Config;
class FluxSourceIterator
{
@@ -58,6 +59,7 @@ public:
static std::unique_ptr<FluxSource> createMemoryFluxSource(
const DiskFlux& flux);
static std::unique_ptr<FluxSource> create(Config& config);
static std::unique_ptr<FluxSource> create(const FluxSourceProto& spec);
public:

View File

@@ -1,5 +1,5 @@
#include "lib/core/globals.h"
#include "lib/fluxmap.h"
#include "lib/data/fluxmap.h"
#include "kryoflux.h"
#include "protocol.h"
#include "lib/fluxsource/flx.h"

View File

@@ -1,5 +1,5 @@
#include "lib/core/globals.h"
#include "lib/fluxmap.h"
#include "lib/data/fluxmap.h"
#include "lib/fluxsource/fluxsource.pb.h"
#include "lib/fluxsource/fluxsource.h"
#include "lib/fluxsource/flx.h"

View File

@@ -1,9 +1,9 @@
#include "lib/core/globals.h"
#include "lib/config.h"
#include "lib/flags.h"
#include "lib/fluxmap.h"
#include "lib/logger.h"
#include "lib/proto.h"
#include "lib/config/config.h"
#include "lib/config/flags.h"
#include "lib/data/fluxmap.h"
#include "lib/core/logger.h"
#include "lib/config/proto.h"
#include "lib/usb/usb.h"
#include "lib/fluxsource/fluxsource.h"
#include "lib/fluxsource/fluxsource.pb.h"

View File

@@ -1,5 +1,5 @@
#include "lib/core/globals.h"
#include "lib/fluxmap.h"
#include "lib/data/fluxmap.h"
#include "kryoflux.h"
#include "protocol.h"
#include <fstream>

View File

@@ -1,5 +1,5 @@
#include "lib/core/globals.h"
#include "lib/fluxmap.h"
#include "lib/data/fluxmap.h"
#include "kryoflux.h"
#include "lib/fluxsource/fluxsource.pb.h"
#include "lib/fluxsource/fluxsource.h"

View File

@@ -1,9 +1,9 @@
#include "lib/core/globals.h"
#include "lib/fluxmap.h"
#include "lib/flux.h"
#include "lib/data/fluxmap.h"
#include "lib/data/flux.h"
#include "lib/fluxsource/fluxsource.h"
#include "lib/fluxmap.h"
#include "lib/layout.h"
#include "lib/data/fluxmap.h"
#include "lib/data/layout.h"
#include <fstream>
class MemoryFluxSourceIterator : public FluxSourceIterator

View File

@@ -1,12 +1,12 @@
#include "lib/core/globals.h"
#include "lib/fluxmap.h"
#include "lib/data/fluxmap.h"
#include "kryoflux.h"
#include "lib/fluxsource/fluxsource.pb.h"
#include "lib/core/utils.h"
#include "lib/fluxsource/fluxsource.h"
#include "lib/scp.h"
#include "lib/proto.h"
#include "lib/logger.h"
#include "lib/config/proto.h"
#include "lib/core/logger.h"
#include <fstream>
static int trackno(int strack)

View File

@@ -1,5 +1,5 @@
#include "lib/core/globals.h"
#include "lib/fluxmap.h"
#include "lib/data/fluxmap.h"
#include "lib/fluxsource/fluxsource.h"
#include "lib/fluxsource/fluxsource.pb.h"

View File

@@ -1,5 +1,5 @@
#include "lib/core/globals.h"
#include "lib/logger.h"
#include "lib/core/logger.h"
#include <sys/time.h>
#include <stdarg.h>

View File

@@ -67,6 +67,6 @@ struct overloaded : Ts...
template <class... Ts>
overloaded(Ts...) -> overloaded<Ts...>;
#include "lib/config.h"
#include "lib/config/config.h"
#endif

View File

@@ -1,10 +1,10 @@
#include "lib/core/globals.h"
#include "lib/flags.h"
#include "lib/sector.h"
#include "lib/config/flags.h"
#include "lib/data/sector.h"
#include "lib/imagereader/imagereader.h"
#include "lib/image.h"
#include "lib/logger.h"
#include "lib/proto.h"
#include "lib/data/image.h"
#include "lib/core/logger.h"
#include "lib/config/proto.h"
#include <algorithm>
#include <iostream>
#include <fstream>

View File

@@ -1,11 +1,11 @@
#include "lib/core/globals.h"
#include "lib/flags.h"
#include "lib/sector.h"
#include "lib/config/flags.h"
#include "lib/data/sector.h"
#include "lib/imagereader/imagereader.h"
#include "lib/image.h"
#include "lib/proto.h"
#include "lib/logger.h"
#include "lib/config.pb.h"
#include "lib/data/image.h"
#include "lib/config/proto.h"
#include "lib/core/logger.h"
#include "lib/config/config.pb.h"
#include <algorithm>
#include <iostream>
#include <fstream>

View File

@@ -1,12 +1,12 @@
#include "lib/core/globals.h"
#include "lib/config.h"
#include "lib/flags.h"
#include "lib/sector.h"
#include "lib/config/config.h"
#include "lib/config/flags.h"
#include "lib/data/sector.h"
#include "lib/imagereader/imagereader.h"
#include "lib/image.h"
#include "lib/logger.h"
#include "lib/proto.h"
#include "lib/config.pb.h"
#include "lib/data/image.h"
#include "lib/core/logger.h"
#include "lib/config/proto.h"
#include "lib/config/config.pb.h"
#include <algorithm>
#include <iostream>
#include <fstream>

Some files were not shown because too many files have changed in this diff Show More