transmitter.c 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. #include "transmitter.h"
  2. #include "protocols/base.h"
  3. #include "protocols/registry.h"
  4. struct SubGhzTransmitter {
  5. const SubGhzProtocol* protocol;
  6. SubGhzProtocolEncoderBase* protocol_instance;
  7. };
  8. SubGhzTransmitter*
  9. subghz_transmitter_alloc_init(SubGhzEnvironment* environment, const char* protocol_name) {
  10. SubGhzTransmitter* instance = NULL;
  11. const SubGhzProtocol* protocol = subghz_protocol_registry_get_by_name(protocol_name);
  12. if(protocol && protocol->encoder && protocol->encoder->alloc) {
  13. instance = malloc(sizeof(SubGhzTransmitter));
  14. instance->protocol = protocol;
  15. instance->protocol_instance = instance->protocol->encoder->alloc(environment);
  16. }
  17. return instance;
  18. }
  19. void subghz_transmitter_free(SubGhzTransmitter* instance) {
  20. furi_assert(instance);
  21. instance->protocol->encoder->free(instance->protocol_instance);
  22. free(instance);
  23. }
  24. SubGhzProtocolEncoderBase* subghz_transmitter_get_protocol_instance(SubGhzTransmitter* instance) {
  25. furi_assert(instance);
  26. return instance->protocol_instance;
  27. }
  28. bool subghz_transmitter_stop(SubGhzTransmitter* instance) {
  29. furi_assert(instance);
  30. bool ret = false;
  31. if(instance->protocol && instance->protocol->encoder && instance->protocol->encoder->stop) {
  32. instance->protocol->encoder->stop(instance->protocol_instance);
  33. ret = true;
  34. }
  35. return ret;
  36. }
  37. bool subghz_transmitter_deserialize(SubGhzTransmitter* instance, FlipperFormat* flipper_format) {
  38. furi_assert(instance);
  39. bool ret = false;
  40. if(instance->protocol && instance->protocol->encoder &&
  41. instance->protocol->encoder->deserialize) {
  42. ret =
  43. instance->protocol->encoder->deserialize(instance->protocol_instance, flipper_format);
  44. }
  45. return ret;
  46. }
  47. LevelDuration subghz_transmitter_yield(void* context) {
  48. SubGhzTransmitter* instance = context;
  49. return instance->protocol->encoder->yield(instance->protocol_instance);
  50. }