transmitter.c 1.6 KB

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