LoRaFEMControl.cpp 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. #include "LoRaFEMControl.h"
  2. #include <driver/rtc_io.h>
  3. #include <esp_sleep.h>
  4. #include <Arduino.h>
  5. void LoRaFEMControl::init(void)
  6. {
  7. pinMode(P_LORA_PA_POWER, OUTPUT);
  8. digitalWrite(P_LORA_PA_POWER, HIGH);
  9. rtc_gpio_hold_dis((gpio_num_t)P_LORA_PA_POWER);
  10. rtc_gpio_hold_dis((gpio_num_t)P_LORA_KCT8103L_PA_CSD);
  11. rtc_gpio_hold_dis((gpio_num_t)P_LORA_KCT8103L_PA_CTX);
  12. delay(1);
  13. pinMode(P_LORA_KCT8103L_PA_CSD, OUTPUT);
  14. digitalWrite(P_LORA_KCT8103L_PA_CSD, HIGH);
  15. pinMode(P_LORA_KCT8103L_PA_CTX, OUTPUT);
  16. digitalWrite(P_LORA_KCT8103L_PA_CTX, lna_enabled ? LOW : HIGH);
  17. setLnaCanControl(true);
  18. }
  19. void LoRaFEMControl::setSleepModeEnable(void)
  20. {
  21. // shutdown the PA
  22. digitalWrite(P_LORA_KCT8103L_PA_CSD, LOW);
  23. }
  24. void LoRaFEMControl::setTxModeEnable(void)
  25. {
  26. digitalWrite(P_LORA_KCT8103L_PA_CSD, HIGH);
  27. digitalWrite(P_LORA_KCT8103L_PA_CTX, HIGH);
  28. }
  29. void LoRaFEMControl::setRxModeEnable(void)
  30. {
  31. digitalWrite(P_LORA_KCT8103L_PA_CSD, HIGH);
  32. if (lna_enabled) {
  33. digitalWrite(P_LORA_KCT8103L_PA_CTX, LOW);
  34. } else {
  35. digitalWrite(P_LORA_KCT8103L_PA_CTX, HIGH);
  36. }
  37. }
  38. void LoRaFEMControl::setRxModeEnableWhenMCUSleep(void)
  39. {
  40. digitalWrite(P_LORA_KCT8103L_PA_CSD, HIGH);
  41. rtc_gpio_hold_en((gpio_num_t)P_LORA_KCT8103L_PA_CSD);
  42. if (lna_enabled) {
  43. digitalWrite(P_LORA_KCT8103L_PA_CTX, LOW);
  44. } else {
  45. digitalWrite(P_LORA_KCT8103L_PA_CTX, HIGH);
  46. }
  47. rtc_gpio_hold_en((gpio_num_t)P_LORA_KCT8103L_PA_CTX);
  48. }
  49. void LoRaFEMControl::setLNAEnable(bool enabled)
  50. {
  51. lna_enabled = enabled;
  52. }