|
13 | 13 | #include "arch/tids990/tids990.h" |
14 | 14 | #include "arch/victor9k/victor9k.h" |
15 | 15 | #include "lib/encoders/encoders.pb.h" |
| 16 | +#include "lib/decoders/decoders.pb.h" |
| 17 | +#include "arch/ibm/ibm.pb.h" |
| 18 | +#include "lib/image.h" |
16 | 19 | #include "protocol.h" |
17 | 20 |
|
18 | 21 | std::unique_ptr<AbstractEncoder> AbstractEncoder::create( |
@@ -40,6 +43,37 @@ std::unique_ptr<AbstractEncoder> AbstractEncoder::create( |
40 | 43 | return (encoder->second)(config); |
41 | 44 | } |
42 | 45 |
|
| 46 | +std::unique_ptr<AbstractEncoder> AbstractEncoder::createFromImage(EncoderProto& encoderConfig, |
| 47 | + const DecoderProto& decoderConfig, const Image& image) |
| 48 | +{ |
| 49 | + IbmEncoderProto* ibm; |
| 50 | + Geometry geometry; |
| 51 | + IbmEncoderProto::TrackdataProto* trackdata; |
| 52 | + IbmEncoderProto::TrackdataProto::SectorRangeProto* sector_range; |
| 53 | + switch (decoderConfig.format_case()) { |
| 54 | + case DecoderProto::kIbm: |
| 55 | + ibm = encoderConfig.mutable_ibm(); |
| 56 | + geometry = image.getGeometry(); |
| 57 | + trackdata = ibm->mutable_trackdata()->Add(); |
| 58 | + sector_range = trackdata->mutable_sector_range(); |
| 59 | + sector_range->set_min_sector(geometry.firstSector); |
| 60 | + sector_range->set_max_sector(geometry.firstSector + geometry.numSectors); |
| 61 | + trackdata->set_gap0(0x1b); |
| 62 | + trackdata->set_gap2(0x09); |
| 63 | + trackdata->set_gap3(0x1b); |
| 64 | + trackdata->set_target_clock_period_us(1e3/250); |
| 65 | + trackdata->set_target_rotational_period_ms(200); |
| 66 | + trackdata->set_sector_size(256); |
| 67 | + return createIbmEncoder(encoderConfig); |
| 68 | + break; |
| 69 | + default: |
| 70 | + Error() << "Solved fluxmap not supported for this decoder"; |
| 71 | + break; |
| 72 | + } |
| 73 | + |
| 74 | + return NULL; |
| 75 | +} |
| 76 | + |
43 | 77 | Fluxmap& Fluxmap::appendBits(const std::vector<bool>& bits, nanoseconds_t clock) |
44 | 78 | { |
45 | 79 | nanoseconds_t now = duration(); |
|
0 commit comments