transmitter.c 2.1 KB

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