diff --git a/.settings/language.settings.xml b/.settings/language.settings.xml index eaaa7fd..5885534 100644 --- a/.settings/language.settings.xml +++ b/.settings/language.settings.xml @@ -3,7 +3,7 @@ - + @@ -14,7 +14,7 @@ - + @@ -22,4 +22,4 @@ - + \ No newline at end of file diff --git a/Src/main.c b/Src/main.c index 4a851d4..75e8893 100644 --- a/Src/main.c +++ b/Src/main.c @@ -399,6 +399,7 @@ int main(void) } else { reset_button = 0; } + __HAL_RCC_CLEAR_RESET_FLAGS(); /* USER CODE END 1 */ /* MCU Configuration----------------------------------------------------------*/ @@ -662,6 +663,8 @@ int main(void) } #endif + MX_IWDG_Init(); + /* USER CODE END RTOS_QUEUES */ diff --git a/TNC/AFSKModulator.hpp b/TNC/AFSKModulator.hpp index 6305885..7794289 100644 --- a/TNC/AFSKModulator.hpp +++ b/TNC/AFSKModulator.hpp @@ -19,6 +19,7 @@ extern osMessageQId hdlcOutputQueueHandle; extern osMessageQId dacOutputQueueHandle; extern TIM_HandleTypeDef htim7; extern DAC_HandleTypeDef hdac1; +extern IWDG_HandleTypeDef hiwdg; namespace mobilinkd { namespace tnc { @@ -134,6 +135,8 @@ struct AFSKModulator : Modulator void fill(uint16_t* buffer, bool bit) { + HAL_IWDG_Refresh(&hiwdg); + for (size_t i = 0; i != BIT_LEN; i++) { int s = sin_table[pos_]; @@ -183,6 +186,8 @@ struct AFSKModulator : Modulator void empty() { + HAL_IWDG_Refresh(&hiwdg); + switch (running_) { case 1: running_ = 0; diff --git a/TNC/AudioInput.cpp b/TNC/AudioInput.cpp index 4259037..8fbb6fb 100644 --- a/TNC/AudioInput.cpp +++ b/TNC/AudioInput.cpp @@ -25,6 +25,7 @@ #include extern osMessageQId ioEventQueueHandle; +extern IWDG_HandleTypeDef hiwdg; extern "C" void SystemClock_Config(void); @@ -183,6 +184,8 @@ void demodulatorTask() { continue; } + HAL_IWDG_Refresh(&hiwdg); + auto block = (adc_pool_type::chunk_type*) evt.value.p; auto samples = (int16_t*) block->buffer; diff --git a/TNC/Fsk9600Modulator.hpp b/TNC/Fsk9600Modulator.hpp index 26e03d2..03eadb3 100644 --- a/TNC/Fsk9600Modulator.hpp +++ b/TNC/Fsk9600Modulator.hpp @@ -5,10 +5,14 @@ #include "Modulator.hpp" +#include "stm32l4xx_hal.h" + #include #include #include +extern IWDG_HandleTypeDef hiwdg; + namespace mobilinkd { namespace tnc { struct Scrambler @@ -128,6 +132,8 @@ struct Fsk9600Modulator : Modulator void empty() { + HAL_IWDG_Refresh(&hiwdg); + switch (state) { case State::STARTING: @@ -204,6 +210,7 @@ private: void fill(uint16_t* buffer, bool bit) { + HAL_IWDG_Refresh(&hiwdg); switch (level) { case Level::HIGH: diff --git a/TNC/IOEventTask.cpp b/TNC/IOEventTask.cpp index dd91efa..f377eb5 100644 --- a/TNC/IOEventTask.cpp +++ b/TNC/IOEventTask.cpp @@ -29,6 +29,7 @@ extern osMessageQId hdlcOutputQueueHandle; extern PCD_HandleTypeDef hpcd_USB_FS; extern osTimerId usbShutdownTimerHandle; +extern IWDG_HandleTypeDef hiwdg; extern "C" void stop2(void); extern "C" void shutdown(void const * argument); @@ -121,7 +122,11 @@ void startIOEventTask(void const*) /* Infinite loop */ for (;;) { - osEvent evt = osMessageGet(ioEventQueueHandle, osWaitForever); + osEvent evt = osMessageGet(ioEventQueueHandle, 100); + if (hdlc::ioFramePool().size() != 0) + HAL_IWDG_Refresh(&hiwdg); + else + CxxErrorHandler(); if (evt.status != osEventMessage) continue; diff --git a/TNC/KissHardware.cpp b/TNC/KissHardware.cpp index e856d32..05e0d64 100644 --- a/TNC/KissHardware.cpp +++ b/TNC/KissHardware.cpp @@ -44,10 +44,10 @@ int powerOffViaUSB(void) namespace mobilinkd { namespace tnc { namespace kiss { #ifdef NUCLEOTNC -const char FIRMWARE_VERSION[] = "2.1.6"; +const char FIRMWARE_VERSION[] = "2.1.7"; const char HARDWARE_VERSION[] = "Mobilinkd NucleoTNC"; #else -const char FIRMWARE_VERSION[] = "2.1.6"; +const char FIRMWARE_VERSION[] = "2.1.7"; const char HARDWARE_VERSION[] = "Mobilinkd TNC3 2.1.1"; #endif diff --git a/TNC/M17Encoder.cpp b/TNC/M17Encoder.cpp index 744465f..2f89db3 100644 --- a/TNC/M17Encoder.cpp +++ b/TNC/M17Encoder.cpp @@ -29,6 +29,7 @@ static osMessageQId m17EncoderInputQueueHandle; static osMessageQId m17EncoderOutputQueueHandle; extern RNG_HandleTypeDef hrng; +extern IWDG_HandleTypeDef hiwdg; namespace mobilinkd { @@ -522,6 +523,9 @@ void M17Encoder::encoderTask(void const*) { osEvent evt = osMessageGet(m17EncoderInputQueueHandle, osWaitForever); if (evt.status != osEventMessage) continue; + + HAL_IWDG_Refresh(&hiwdg); + auto frame = static_cast(evt.value.p); if (frame->size() != 48) WARN("Bad frame size %u", frame->size());