You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

104 line
2.2 KiB

  1. //#include <proc/p32mx440f256h.h>
  2. #include "HarakiriRelay.h"
  3. #include "BoardCfg.h"
  4. #include "timer.h"
  5. #include "LoraWatchdog.h"
  6. #include "SIM7080GInterface.h"
  7. int mLoraSMState;
  8. void InitLoraWatchdog()
  9. {
  10. mLoraSMState = LORA_WATCHDOG_OK_STATE;
  11. TimerStart(LORA_WATCHDOG_TIMER,LORA_WATCHDOG_MODULE_RESET_TIMEOUT);
  12. }
  13. void TickLoraWatchdog()
  14. {
  15. LoraWatchdogStateMachine(LORA_SM_TICK_EVENT);
  16. }
  17. void LoraWatchdogStateMachine(int Event)
  18. {
  19. switch(mLoraSMState)
  20. {
  21. case LORA_WATCHDOG_OK_STATE:
  22. {
  23. switch(Event)
  24. {
  25. case LORA_SM_TICK_EVENT:
  26. {
  27. if(IsTimerExpired(LORA_WATCHDOG_TIMER))
  28. {
  29. //We lost the comm... reset the LoRa module
  30. LORA_MODULE_RELAY_PIN = 1; //Turn OFF the LoRa module
  31. TimerStart(LORA_WATCHDOG_TIMER,LORA_WATCHDOG_MODULE_OFF_TIMEOUT);
  32. mLoraSMState = LORA_WATCHDOG_RESET_LORA_MODULE_STATE;
  33. }
  34. break;
  35. }
  36. case LORA_SM_KICK_EVENT:
  37. {
  38. //All is well...
  39. TimerStart(LORA_WATCHDOG_TIMER,LORA_WATCHDOG_MODULE_RESET_TIMEOUT);
  40. break;
  41. }
  42. }
  43. break;
  44. }
  45. case LORA_WATCHDOG_RESET_LORA_MODULE_STATE:
  46. {
  47. switch(Event)
  48. {
  49. case LORA_SM_TICK_EVENT:
  50. case LORA_SM_KICK_EVENT://That would be very weird since the LoRa module is OFF!!!
  51. {
  52. if(IsTimerExpired(LORA_WATCHDOG_TIMER))
  53. {
  54. //Reset is done, turn module back ON.
  55. LORA_MODULE_RELAY_PIN = 0; //Turn ON the LoRa module
  56. TimerStart(LORA_WATCHDOG_TIMER,LORA_WATCHDOG_REBOOT_TIMEOUT); //If we don't get Comm. back after this delay... reboot the PIC
  57. mLoraSMState = LORA_WATCHDOG_WAIT_FOR_RECONNECT_STATE;
  58. LTEModuleReset();
  59. }
  60. break;
  61. }
  62. }
  63. break;
  64. }
  65. case LORA_WATCHDOG_WAIT_FOR_RECONNECT_STATE:
  66. {
  67. switch(Event)
  68. {
  69. case LORA_SM_TICK_EVENT:
  70. {
  71. if(IsTimerExpired(LORA_WATCHDOG_TIMER))
  72. {
  73. TurnOFFWiFi();
  74. Sleep(100);
  75. SoftReset();
  76. }
  77. break;
  78. }
  79. case LORA_SM_KICK_EVENT:
  80. {
  81. //Communication is re-established.
  82. TimerStart(LORA_WATCHDOG_TIMER,LORA_WATCHDOG_MODULE_RESET_TIMEOUT);
  83. mLoraSMState = LORA_WATCHDOG_OK_STATE;
  84. break;
  85. }
  86. }
  87. break;
  88. }
  89. }
  90. }
  91. void KickLoraWatchdog()
  92. {
  93. LoraWatchdogStateMachine(LORA_SM_KICK_EVENT);
  94. }