portapack-mayhem/firmware/baseband/fprotos/subghzdprotos.hpp
Totoo 2ccda5aebd
Subghz decoder (#1646)
* Initial commit - wip

* Half part of the transition of baseband processor.

* More SGD

* WIP, Weather refactor, UI improv

* Rename

* Added 4msps, and fixes

* Fixes

* princeton working

* Renamed proc_weather, bc now multifunctional

* Proto: bett

* FPS_CAME = 4,
    FPS_PRASTEL = 5,
    FPS_AIRFORCE = 6,

* Came Atomo, fixes

* Separate weather and sgd, bc of baseband size limit

* Fix display

* Save space

* More protos

* Dooya proto added

* More protos

* add protos

* More protos

* Move weather to ext app

* nw

* Revert "Move weather to ext app"

This reverts commit 8a84aac2f5.

* revert

* Fix merge

* Better naming

* More protos

* More protos

* Add protos

* Fix warning

* Add NeroRadio

* more protos

* more protos

* More protos

* Shrink a bit

* fixes

* More protos

* Nicer code

* Fix naming

* Fix format

* Remove unused

* Fix some protos, that needs a LOOOONG part with the same lo/high

* Modify key calculation
2023-12-16 16:37:51 -06:00

133 lines
4.9 KiB
C++

/*
This is the protocol list handler. It holds an instance of all known protocols.
So include here the .hpp, and add a new element to the protos vector in the constructor. That's all you need to do here if you wanna add a new proto.
@htotoo
*/
#include <vector>
#include <memory>
#include "portapack_shared_memory.hpp"
#include "fprotolistgeneral.hpp"
#include "subghzdbase.hpp"
#include "s-princeton.hpp"
#include "s-bett.hpp"
#include "s-came.hpp"
#include "s-came_atomo.hpp"
#include "s-came_twee.hpp"
#include "s-chambcode.hpp"
#include "s-clemsa.hpp"
#include "s-doitrand.hpp"
#include "s-dooya.hpp"
#include "s-faac.hpp"
#include "s-gate_tx.hpp"
#include "s-holtek.hpp"
#include "s-holtek_ht12x.hpp"
#include "s-honeywell.hpp"
#include "s-honeywellwdb.hpp"
#include "s-hormann.hpp"
#include "s-ido.hpp"
#include "s-intertechnov3.hpp"
#include "s-keeloq.hpp"
#include "s-kinggates_stylo_4k.hpp"
#include "s-linear.hpp"
#include "s-linear_delta3.hpp"
#include "s-magellan.hpp"
#include "s-marantec.hpp"
#include "s-mastercode.hpp"
#include "s-megacode.hpp"
#include "s-neroradio.hpp"
#include "s-nero_sketch.hpp"
#include "s-nice_flo.hpp"
#include "s-nice_flors.hpp"
#include "s-phoenix_v2.hpp"
#include "s-power_smart.hpp"
#include "s-secplus_v1.hpp"
#include "s-secplus_v2.hpp"
#include "s-smc5326.hpp"
#include "s-star_line.hpp"
#include "s-x10.hpp"
// GENIE FROM PR
#ifndef __FPROTO_PROTOLISTSGZ_H__
#define __FPROTO_PROTOLISTSGZ_H__
class SubGhzDProtos : public FProtoListGeneral {
public:
SubGhzDProtos(const SubGhzDProtos&) { SubGhzDProtos(); }; // won't use, but makes compiler happy
SubGhzDProtos& operator=(const SubGhzDProtos&) { return *this; } // won't use, but makes compiler happy
SubGhzDProtos() {
// add protos
protos[FPS_PRINCETON] = new FProtoSubGhzDPrinceton();
protos[FPS_BETT] = new FProtoSubGhzDBett();
protos[FPS_CAME] = new FProtoSubGhzDCame();
protos[FPS_CAMEATOMO] = new FProtoSubGhzDCameAtomo();
protos[FPS_CAMETWEE] = new FProtoSubGhzDCameTwee();
protos[FPS_CHAMBCODE] = new FProtoSubGhzDChambCode();
protos[FPS_CLEMSA] = new FProtoSubGhzDClemsa();
protos[FPS_DOITRAND] = new FProtoSubGhzDDoitrand();
protos[FPS_DOOYA] = new FProtoSubGhzDDooya();
protos[FPS_FAAC] = new FProtoSubGhzDFaac();
protos[FPS_GATETX] = new FProtoSubGhzDGateTx();
protos[FPS_HOLTEK] = new FProtoSubGhzDHoltek();
protos[FPS_HOLTEKHT12X] = new FProtoSubGhzDHoltekHt12x();
protos[FPS_HONEYWELL] = new FProtoSubGhzDHoneywell();
protos[FPS_HONEYWELLWDB] = new FProtoSubGhzDHoneywellWdb();
protos[FPS_HORMANN] = new FProtoSubGhzDHormann();
protos[FPS_IDO] = new FProtoSubGhzDIdo();
protos[FPS_INTERTECHNOV3] = new FProtoSubGhzDIntertechnoV3();
protos[FPS_KEELOQ] = new FProtoSubGhzDKeeLoq();
protos[FPS_KINGGATESSTYLO4K] = new FProtoSubGhzDKinggatesStylo4K();
protos[FPS_LINEAR] = new FProtoSubGhzDLinear();
protos[FPS_LINEARDELTA3] = new FProtoSubGhzDLinearDelta3();
protos[FPS_MAGELLAN] = new FProtoSubGhzDMagellan();
protos[FPS_MARANTEC] = new FProtoSubGhzDMarantec();
protos[FPS_MASTERCODE] = new FProtoSubGhzDMastercode();
protos[FPS_MEGACODE] = new FProtoSubGhzDMegacode();
protos[FPS_NERORADIO] = new FProtoSubGhzDNeroRadio();
protos[FPS_NERO_SKETCH] = new FProtoSubGhzDNeroSketch();
protos[FPS_NICEFLO] = new FProtoSubGhzDNiceflo();
protos[FPS_NICEFLORS] = new FProtoSubGhzDNiceflors();
protos[FPS_PHOENIXV2] = new FProtoSubGhzDPhoenixV2();
protos[FPS_POWERSMART] = new FProtoSubGhzDPowerSmart();
protos[FPS_SECPLUSV1] = new FProtoSubGhzDSecPlusV1();
protos[FPS_SECPLUSV2] = new FProtoSubGhzDSecPlusV2();
protos[FPS_SMC5326] = new FProtoSubGhzDSmc5326();
// somify keytis skipped
// somify telis skipped
protos[FPS_STARLINE] = new FProtoSubGhzDStarLine();
protos[FPS_X10] = new FProtoSubGhzDX10();
// genie skipped
for (uint8_t i = 0; i < FPS_COUNT; ++i) {
if (protos[i] != NULL) protos[i]->setCallback(callbackTarget);
}
}
~SubGhzDProtos() { // not needed for current operation logic, but a bit more elegant :)
for (uint8_t i = 0; i < FPS_COUNT; ++i) {
if (protos[i] != NULL) {
free(protos[i]);
protos[i] = NULL;
}
}
};
static void callbackTarget(FProtoSubGhzDBase* instance) {
SubGhzDDataMessage packet_message{instance->sensorType, instance->btn, instance->data_count_bit, instance->serial, instance->data, instance->cnt};
shared_memory.application_queue.push(packet_message);
}
void feed(bool level, uint32_t duration) {
for (uint8_t i = 0; i < FPS_COUNT; ++i) {
if (protos[i] != NULL) protos[i]->feed(level, duration);
}
}
protected:
FProtoSubGhzDBase* protos[FPS_COUNT] = {NULL};
};
#endif