Index: ctrl/firmware/Main/CubeMX/Middlewares/ST/threadx/common/src/tx_timer_activate.c
===================================================================
--- ctrl/firmware/Main/CubeMX/Middlewares/ST/threadx/common/src/tx_timer_activate.c	(revision 68)
+++ ctrl/firmware/Main/CubeMX/Middlewares/ST/threadx/common/src/tx_timer_activate.c	(revision 68)
@@ -0,0 +1,137 @@
+/**************************************************************************/
+/*                                                                        */
+/*       Copyright (c) Microsoft Corporation. All rights reserved.        */
+/*                                                                        */
+/*       This software is licensed under the Microsoft Software License   */
+/*       Terms for Microsoft Azure RTOS. Full text of the license can be  */
+/*       found in the LICENSE file at https://aka.ms/AzureRTOS_EULA       */
+/*       and in the root directory of this software.                      */
+/*                                                                        */
+/**************************************************************************/
+
+
+/**************************************************************************/
+/**************************************************************************/
+/**                                                                       */
+/** ThreadX Component                                                     */
+/**                                                                       */
+/**   Timer                                                               */
+/**                                                                       */
+/**************************************************************************/
+/**************************************************************************/
+
+#define TX_SOURCE_CODE
+
+
+/* Include necessary system files.  */
+
+#include "tx_api.h"
+#include "tx_timer.h"
+#ifdef TX_ENABLE_EVENT_TRACE
+#include "tx_trace.h"
+#endif
+
+
+/**************************************************************************/
+/*                                                                        */
+/*  FUNCTION                                               RELEASE        */
+/*                                                                        */
+/*    _tx_timer_activate                                  PORTABLE C      */
+/*                                                           6.1          */
+/*  AUTHOR                                                                */
+/*                                                                        */
+/*    William E. Lamie, Microsoft Corporation                             */
+/*                                                                        */
+/*  DESCRIPTION                                                           */
+/*                                                                        */
+/*    This function activates the specified application timer.            */
+/*                                                                        */
+/*  INPUT                                                                 */
+/*                                                                        */
+/*    timer_ptr                         Pointer to timer control block    */
+/*                                                                        */
+/*  OUTPUT                                                                */
+/*                                                                        */
+/*    TX_SUCCESS                        Always returns success            */
+/*                                                                        */
+/*  CALLS                                                                 */
+/*                                                                        */
+/*    _tx_timer_system_activate         Actual timer activation function  */
+/*                                                                        */
+/*  CALLED BY                                                             */
+/*                                                                        */
+/*    Application Code                                                    */
+/*                                                                        */
+/*  RELEASE HISTORY                                                       */
+/*                                                                        */
+/*    DATE              NAME                      DESCRIPTION             */
+/*                                                                        */
+/*  05-19-2020     William E. Lamie         Initial Version 6.0           */
+/*  09-30-2020     Yuxin Zhou               Modified comment(s),          */
+/*                                            resulting in version 6.1    */
+/*                                                                        */
+/**************************************************************************/
+UINT  _tx_timer_activate(TX_TIMER *timer_ptr)
+{
+
+TX_INTERRUPT_SAVE_AREA
+
+UINT        status;
+
+
+    /* Disable interrupts to put the timer on the created list.  */
+    TX_DISABLE
+
+#ifdef TX_ENABLE_EVENT_TRACE
+
+    /* If trace is enabled, insert this event into the trace buffer.  */
+    TX_TRACE_IN_LINE_INSERT(TX_TRACE_TIMER_ACTIVATE, timer_ptr, 0, 0, 0, TX_TRACE_TIMER_EVENTS)
+#endif
+
+#ifdef TX_ENABLE_EVENT_LOGGING
+
+    /* Log this kernel call.  */
+    TX_EL_TIMER_ACTIVATE_INSERT
+#endif
+
+    /* Check for an already active timer.  */
+    if (timer_ptr -> tx_timer_internal.tx_timer_internal_list_head != TX_NULL)
+    {
+
+        /* Timer is already active, return an error.  */
+        status =  TX_ACTIVATE_ERROR;
+    }
+
+    /* Check for a timer with a zero expiration.  */
+    else if (timer_ptr -> tx_timer_internal.tx_timer_internal_remaining_ticks == ((ULONG) 0))
+    {
+
+        /* Timer is being activated with a zero expiration.  */
+        status =  TX_ACTIVATE_ERROR;
+    }
+    else
+    {
+
+#ifdef TX_TIMER_ENABLE_PERFORMANCE_INFO
+
+        /* Increment the total activations counter.  */
+        _tx_timer_performance_activate_count++;
+
+        /* Increment the number of activations on this timer.  */
+        timer_ptr -> tx_timer_performance_activate_count++;
+#endif
+
+        /* Call actual activation function.  */
+        _tx_timer_system_activate(&(timer_ptr -> tx_timer_internal));
+
+        /* Return a successful status.  */
+        status =  TX_SUCCESS;
+    }
+
+    /* Restore interrupts.  */
+    TX_RESTORE
+
+    /* Return completion status.  */
+    return(status);
+}
+
Index: ctrl/firmware/Main/CubeMX/Middlewares/ST/threadx/common/src/tx_timer_change.c
===================================================================
--- ctrl/firmware/Main/CubeMX/Middlewares/ST/threadx/common/src/tx_timer_change.c	(revision 68)
+++ ctrl/firmware/Main/CubeMX/Middlewares/ST/threadx/common/src/tx_timer_change.c	(revision 68)
@@ -0,0 +1,105 @@
+/**************************************************************************/
+/*                                                                        */
+/*       Copyright (c) Microsoft Corporation. All rights reserved.        */
+/*                                                                        */
+/*       This software is licensed under the Microsoft Software License   */
+/*       Terms for Microsoft Azure RTOS. Full text of the license can be  */
+/*       found in the LICENSE file at https://aka.ms/AzureRTOS_EULA       */
+/*       and in the root directory of this software.                      */
+/*                                                                        */
+/**************************************************************************/
+
+
+/**************************************************************************/
+/**************************************************************************/
+/**                                                                       */
+/** ThreadX Component                                                     */
+/**                                                                       */
+/**   Timer                                                               */
+/**                                                                       */
+/**************************************************************************/
+/**************************************************************************/
+
+#define TX_SOURCE_CODE
+
+
+/* Include necessary system files.  */
+
+#include "tx_api.h"
+#include "tx_trace.h"
+#include "tx_timer.h"
+
+
+/**************************************************************************/
+/*                                                                        */
+/*  FUNCTION                                               RELEASE        */
+/*                                                                        */
+/*    _tx_timer_change                                    PORTABLE C      */
+/*                                                           6.1          */
+/*  AUTHOR                                                                */
+/*                                                                        */
+/*    William E. Lamie, Microsoft Corporation                             */
+/*                                                                        */
+/*  DESCRIPTION                                                           */
+/*                                                                        */
+/*    This function modifies an application timer as specified by the     */
+/*    input.                                                              */
+/*                                                                        */
+/*  INPUT                                                                 */
+/*                                                                        */
+/*    timer_ptr                         Pointer to timer control block    */
+/*    initial_ticks                     Initial expiration ticks          */
+/*    reschedule_ticks                  Reschedule ticks                  */
+/*                                                                        */
+/*  OUTPUT                                                                */
+/*                                                                        */
+/*    TX_SUCCESS                        Successful completion status      */
+/*                                                                        */
+/*  CALLS                                                                 */
+/*                                                                        */
+/*    None                                                                */
+/*                                                                        */
+/*  CALLED BY                                                             */
+/*                                                                        */
+/*    Application Code                                                    */
+/*                                                                        */
+/*  RELEASE HISTORY                                                       */
+/*                                                                        */
+/*    DATE              NAME                      DESCRIPTION             */
+/*                                                                        */
+/*  05-19-2020     William E. Lamie         Initial Version 6.0           */
+/*  09-30-2020     Yuxin Zhou               Modified comment(s),          */
+/*                                            resulting in version 6.1    */
+/*                                                                        */
+/**************************************************************************/
+UINT  _tx_timer_change(TX_TIMER *timer_ptr, ULONG initial_ticks, ULONG reschedule_ticks)
+{
+
+TX_INTERRUPT_SAVE_AREA
+
+
+    /* Disable interrupts to put the timer on the created list.  */
+    TX_DISABLE
+
+    /* If trace is enabled, insert this event into the trace buffer.  */
+    TX_TRACE_IN_LINE_INSERT(TX_TRACE_TIMER_CHANGE, timer_ptr, initial_ticks, reschedule_ticks, 0, TX_TRACE_TIMER_EVENTS)
+
+    /* Log this kernel call.  */
+    TX_EL_TIMER_CHANGE_INSERT
+
+    /* Determine if the timer is active.  */
+    if (timer_ptr -> tx_timer_internal.tx_timer_internal_list_head == TX_NULL)
+    {
+
+        /* Setup the new expiration fields.  */
+        timer_ptr -> tx_timer_internal.tx_timer_internal_remaining_ticks =      initial_ticks;
+        timer_ptr -> tx_timer_internal.tx_timer_internal_re_initialize_ticks =  reschedule_ticks;
+    }
+
+    /* Restore interrupts.  */
+    TX_RESTORE
+
+    /* Return TX_SUCCESS.  */
+    return(TX_SUCCESS);
+}
+
Index: ctrl/firmware/Main/CubeMX/Middlewares/ST/threadx/common/src/tx_timer_deactivate.c
===================================================================
--- ctrl/firmware/Main/CubeMX/Middlewares/ST/threadx/common/src/tx_timer_deactivate.c	(revision 68)
+++ ctrl/firmware/Main/CubeMX/Middlewares/ST/threadx/common/src/tx_timer_deactivate.c	(revision 68)
@@ -0,0 +1,252 @@
+/**************************************************************************/
+/*                                                                        */
+/*       Copyright (c) Microsoft Corporation. All rights reserved.        */
+/*                                                                        */
+/*       This software is licensed under the Microsoft Software License   */
+/*       Terms for Microsoft Azure RTOS. Full text of the license can be  */
+/*       found in the LICENSE file at https://aka.ms/AzureRTOS_EULA       */
+/*       and in the root directory of this software.                      */
+/*                                                                        */
+/**************************************************************************/
+
+
+/**************************************************************************/
+/**************************************************************************/
+/**                                                                       */
+/** ThreadX Component                                                     */
+/**                                                                       */
+/**   Timer                                                               */
+/**                                                                       */
+/**************************************************************************/
+/**************************************************************************/
+
+#define TX_SOURCE_CODE
+
+
+/* Include necessary system files.  */
+
+#include "tx_api.h"
+#include "tx_trace.h"
+#include "tx_timer.h"
+
+
+/**************************************************************************/
+/*                                                                        */
+/*  FUNCTION                                               RELEASE        */
+/*                                                                        */
+/*    _tx_timer_deactivate                                PORTABLE C      */
+/*                                                           6.1          */
+/*  AUTHOR                                                                */
+/*                                                                        */
+/*    William E. Lamie, Microsoft Corporation                             */
+/*                                                                        */
+/*  DESCRIPTION                                                           */
+/*                                                                        */
+/*    This function deactivates the specified application timer.          */
+/*                                                                        */
+/*  INPUT                                                                 */
+/*                                                                        */
+/*    timer_ptr                         Pointer to timer control block    */
+/*                                                                        */
+/*  OUTPUT                                                                */
+/*                                                                        */
+/*    TX_SUCCESS                        Always returns success            */
+/*                                                                        */
+/*  CALLS                                                                 */
+/*                                                                        */
+/*    None                                                                */
+/*                                                                        */
+/*  CALLED BY                                                             */
+/*                                                                        */
+/*    Application Code                                                    */
+/*                                                                        */
+/*  RELEASE HISTORY                                                       */
+/*                                                                        */
+/*    DATE              NAME                      DESCRIPTION             */
+/*                                                                        */
+/*  05-19-2020     William E. Lamie         Initial Version 6.0           */
+/*  09-30-2020     Yuxin Zhou               Modified comment(s),          */
+/*                                            resulting in version 6.1    */
+/*                                                                        */
+/**************************************************************************/
+UINT  _tx_timer_deactivate(TX_TIMER *timer_ptr)
+{
+TX_INTERRUPT_SAVE_AREA
+
+TX_TIMER_INTERNAL   *internal_ptr;
+TX_TIMER_INTERNAL   **list_head;
+TX_TIMER_INTERNAL   *next_timer;
+TX_TIMER_INTERNAL   *previous_timer;
+ULONG               ticks_left;
+UINT                active_timer_list;
+
+
+    /* Setup internal timer pointer.  */
+    internal_ptr =  &(timer_ptr -> tx_timer_internal);
+
+    /* Disable interrupts while the remaining time before expiration is
+       calculated.  */
+    TX_DISABLE
+
+#ifdef TX_TIMER_ENABLE_PERFORMANCE_INFO
+
+    /* Increment the total deactivations counter.  */
+    _tx_timer_performance_deactivate_count++;
+
+    /* Increment the number of deactivations on this timer.  */
+    timer_ptr -> tx_timer_performance_deactivate_count++;
+#endif
+
+    /* If trace is enabled, insert this event into the trace buffer.  */
+    TX_TRACE_IN_LINE_INSERT(TX_TRACE_TIMER_DEACTIVATE, timer_ptr, TX_POINTER_TO_ULONG_CONVERT(&ticks_left), 0, 0, TX_TRACE_TIMER_EVENTS)
+
+    /* Log this kernel call.  */
+    TX_EL_TIMER_DEACTIVATE_INSERT
+
+    /* Pickup the list head.  */
+    list_head =  internal_ptr -> tx_timer_internal_list_head;
+
+    /* Is the timer active?  */
+    if (list_head != TX_NULL)
+    {
+
+        /* Default the active timer list flag to false.  */
+        active_timer_list =  TX_FALSE;
+
+        /* Determine if the head pointer is within the timer expiration list.  */
+        if (TX_TIMER_INDIRECT_TO_VOID_POINTER_CONVERT(list_head) >= TX_TIMER_INDIRECT_TO_VOID_POINTER_CONVERT(_tx_timer_list_start))
+        {
+
+            /* Now check to make sure the list head is before the end of the list.  */
+            if (TX_TIMER_INDIRECT_TO_VOID_POINTER_CONVERT(list_head) < TX_TIMER_INDIRECT_TO_VOID_POINTER_CONVERT(_tx_timer_list_end))
+            {
+
+                /* Set the active timer list flag to true.  */
+                active_timer_list =  TX_TRUE;
+            }
+        }
+
+        /* Determine if the timer is on active timer list.  */
+        if (active_timer_list == TX_TRUE)
+        {
+
+            /* This timer is active and has not yet expired.  */
+
+            /* Calculate the amount of time that has elapsed since the timer
+               was activated.  */
+
+            /* Is this timer's entry after the current timer pointer?  */
+            if (TX_TIMER_INDIRECT_TO_VOID_POINTER_CONVERT(list_head) >= TX_TIMER_INDIRECT_TO_VOID_POINTER_CONVERT(_tx_timer_current_ptr))
+            {
+
+                /* Calculate ticks left to expiration - just the difference between this
+                   timer's entry and the current timer pointer.  */
+                ticks_left =  (ULONG) (TX_TIMER_POINTER_DIF(list_head,_tx_timer_current_ptr)) + ((ULONG) 1);
+            }
+            else
+            {
+
+                /* Calculate the ticks left with a wrapped list condition.  */
+                ticks_left =  (ULONG) (TX_TIMER_POINTER_DIF(list_head,_tx_timer_list_start));
+
+                ticks_left =  ticks_left + (ULONG) ((TX_TIMER_POINTER_DIF(_tx_timer_list_end, _tx_timer_current_ptr)) + ((ULONG) 1));
+            }
+
+            /* Adjust the remaining ticks accordingly.  */
+            if (internal_ptr -> tx_timer_internal_remaining_ticks > TX_TIMER_ENTRIES)
+            {
+
+                /* Subtract off the last full pass through the timer list and add the
+                   time left.  */
+                internal_ptr -> tx_timer_internal_remaining_ticks =
+                        (internal_ptr -> tx_timer_internal_remaining_ticks - TX_TIMER_ENTRIES) + ticks_left;
+            }
+            else
+            {
+
+                /* Just put the ticks left into the timer's remaining ticks.  */
+                internal_ptr -> tx_timer_internal_remaining_ticks =  ticks_left;
+            }
+        }
+        else
+        {
+
+            /* Determine if this is timer has just expired.  */
+            if (_tx_timer_expired_timer_ptr != internal_ptr)
+            {
+
+                /* No, it hasn't expired. Now check for remaining time greater than the list
+                   size.  */
+                if (internal_ptr -> tx_timer_internal_remaining_ticks > TX_TIMER_ENTRIES)
+                {
+
+                    /* Adjust the remaining ticks.  */
+                    internal_ptr -> tx_timer_internal_remaining_ticks =
+                                            internal_ptr -> tx_timer_internal_remaining_ticks - TX_TIMER_ENTRIES;
+                }
+                else
+                {
+
+                    /* Set the remaining time to the reactivation time.  */
+                    internal_ptr -> tx_timer_internal_remaining_ticks =  internal_ptr -> tx_timer_internal_re_initialize_ticks;
+                }
+            }
+            else
+            {
+
+                /* Set the remaining time to the reactivation time.  */
+                internal_ptr -> tx_timer_internal_remaining_ticks =  internal_ptr -> tx_timer_internal_re_initialize_ticks;
+            }
+        }
+
+        /* Pickup the next timer.  */
+        next_timer =  internal_ptr -> tx_timer_internal_active_next;
+
+        /* See if this is the only timer in the list.  */
+        if (internal_ptr == next_timer)
+        {
+
+            /* Yes, the only timer on the list.  */
+
+            /* Determine if the head pointer needs to be updated.  */
+            if (*(list_head) == internal_ptr)
+            {
+
+                /* Update the head pointer.  */
+                *(list_head) =  TX_NULL;
+            }
+        }
+        else
+        {
+
+            /* At least one more timer is on the same expiration list.  */
+
+            /* Update the links of the adjacent timers.  */
+            previous_timer =                                   internal_ptr -> tx_timer_internal_active_previous;
+            next_timer -> tx_timer_internal_active_previous =  previous_timer;
+            previous_timer -> tx_timer_internal_active_next =  next_timer;
+
+            /* Determine if the head pointer needs to be updated.  */
+            if (*(list_head) == internal_ptr)
+            {
+
+                /* Update the next timer in the list with the list head
+                   pointer.  */
+                next_timer -> tx_timer_internal_list_head =  list_head;
+
+                /* Update the head pointer.  */
+                *(list_head) =  next_timer;
+            }
+        }
+
+        /* Clear the timer's list head pointer.  */
+        internal_ptr -> tx_timer_internal_list_head =  TX_NULL;
+    }
+
+    /* Restore interrupts to previous posture.  */
+    TX_RESTORE
+
+    /* Return TX_SUCCESS.  */
+    return(TX_SUCCESS);
+}
+
Index: ctrl/firmware/Main/CubeMX/Middlewares/ST/threadx/common/src/txe_timer_activate.c
===================================================================
--- ctrl/firmware/Main/CubeMX/Middlewares/ST/threadx/common/src/txe_timer_activate.c	(revision 68)
+++ ctrl/firmware/Main/CubeMX/Middlewares/ST/threadx/common/src/txe_timer_activate.c	(revision 68)
@@ -0,0 +1,103 @@
+/**************************************************************************/
+/*                                                                        */
+/*       Copyright (c) Microsoft Corporation. All rights reserved.        */
+/*                                                                        */
+/*       This software is licensed under the Microsoft Software License   */
+/*       Terms for Microsoft Azure RTOS. Full text of the license can be  */
+/*       found in the LICENSE file at https://aka.ms/AzureRTOS_EULA       */
+/*       and in the root directory of this software.                      */
+/*                                                                        */
+/**************************************************************************/
+
+
+/**************************************************************************/
+/**************************************************************************/
+/**                                                                       */
+/** ThreadX Component                                                     */
+/**                                                                       */
+/**   Timer                                                               */
+/**                                                                       */
+/**************************************************************************/
+/**************************************************************************/
+
+#define TX_SOURCE_CODE
+
+
+/* Include necessary system files.  */
+
+#include "tx_api.h"
+#include "tx_timer.h"
+
+
+/**************************************************************************/
+/*                                                                        */
+/*  FUNCTION                                               RELEASE        */
+/*                                                                        */
+/*    _txe_timer_activate                                 PORTABLE C      */
+/*                                                           6.1          */
+/*  AUTHOR                                                                */
+/*                                                                        */
+/*    William E. Lamie, Microsoft Corporation                             */
+/*                                                                        */
+/*  DESCRIPTION                                                           */
+/*                                                                        */
+/*    This function checks for errors in the activate application timer   */
+/*    function call.                                                      */
+/*                                                                        */
+/*  INPUT                                                                 */
+/*                                                                        */
+/*    timer_ptr                         Pointer to timer control block    */
+/*                                                                        */
+/*  OUTPUT                                                                */
+/*                                                                        */
+/*    TX_TIMER_ERROR                    Invalid application timer         */
+/*    TX_ACTIVATE_ERROR                 Application timer already active  */
+/*    status                            Actual completion status          */
+/*                                                                        */
+/*  CALLS                                                                 */
+/*                                                                        */
+/*    _tx_timer_activate                Actual application timer activate */
+/*                                                                        */
+/*  CALLED BY                                                             */
+/*                                                                        */
+/*    Application Code                                                    */
+/*                                                                        */
+/*  RELEASE HISTORY                                                       */
+/*                                                                        */
+/*    DATE              NAME                      DESCRIPTION             */
+/*                                                                        */
+/*  05-19-2020     William E. Lamie         Initial Version 6.0           */
+/*  09-30-2020     Yuxin Zhou               Modified comment(s),          */
+/*                                            resulting in version 6.1    */
+/*                                                                        */
+/**************************************************************************/
+UINT  _txe_timer_activate(TX_TIMER *timer_ptr)
+{
+
+UINT    status;
+
+
+    /* Check for an invalid timer pointer.  */
+    if (timer_ptr == TX_NULL)
+    {
+        /* Timer pointer is invalid, return appropriate error code.  */
+        status =  TX_TIMER_ERROR;
+    }
+
+    /* Now check for invalid timer ID.  */
+    else if (timer_ptr -> tx_timer_id != TX_TIMER_ID)
+    {
+        /* Timer pointer is invalid, return appropriate error code.  */
+        status =  TX_TIMER_ERROR;
+    }
+    else
+    {
+
+        /* Call actual application timer activate function.  */
+        status =  _tx_timer_activate(timer_ptr);
+    }
+
+    /* Return completion status.  */
+    return(status);
+}
+
Index: ctrl/firmware/Main/CubeMX/Middlewares/ST/threadx/common/src/txe_timer_change.c
===================================================================
--- ctrl/firmware/Main/CubeMX/Middlewares/ST/threadx/common/src/txe_timer_change.c	(revision 68)
+++ ctrl/firmware/Main/CubeMX/Middlewares/ST/threadx/common/src/txe_timer_change.c	(revision 68)
@@ -0,0 +1,126 @@
+/**************************************************************************/
+/*                                                                        */
+/*       Copyright (c) Microsoft Corporation. All rights reserved.        */
+/*                                                                        */
+/*       This software is licensed under the Microsoft Software License   */
+/*       Terms for Microsoft Azure RTOS. Full text of the license can be  */
+/*       found in the LICENSE file at https://aka.ms/AzureRTOS_EULA       */
+/*       and in the root directory of this software.                      */
+/*                                                                        */
+/**************************************************************************/
+
+
+/**************************************************************************/
+/**************************************************************************/
+/**                                                                       */
+/** ThreadX Component                                                     */
+/**                                                                       */
+/**   Timer                                                               */
+/**                                                                       */
+/**************************************************************************/
+/**************************************************************************/
+
+#define TX_SOURCE_CODE
+
+
+/* Include necessary system files.  */
+
+#include "tx_api.h"
+#include "tx_initialize.h"
+#include "tx_thread.h"
+#include "tx_timer.h"
+
+
+/**************************************************************************/
+/*                                                                        */
+/*  FUNCTION                                               RELEASE        */
+/*                                                                        */
+/*    _txe_timer_change                                   PORTABLE C      */
+/*                                                           6.1          */
+/*  AUTHOR                                                                */
+/*                                                                        */
+/*    William E. Lamie, Microsoft Corporation                             */
+/*                                                                        */
+/*  DESCRIPTION                                                           */
+/*                                                                        */
+/*    This function checks for errors in the application timer change     */
+/*    function call.                                                      */
+/*                                                                        */
+/*  INPUT                                                                 */
+/*                                                                        */
+/*    timer_ptr                         Pointer to timer control block    */
+/*    initial_ticks                     Initial expiration ticks          */
+/*    reschedule_ticks                  Reschedule ticks                  */
+/*                                                                        */
+/*  OUTPUT                                                                */
+/*                                                                        */
+/*    TX_TIMER_ERROR                    Invalid application timer pointer */
+/*    TX_TICK_ERROR                     Invalid initial tick value of 0   */
+/*    TX_CALLER_ERROR                   Invalid caller of this function   */
+/*    status                            Actual completion status          */
+/*                                                                        */
+/*  CALLS                                                                 */
+/*                                                                        */
+/*    _tx_timer_change                  Actual timer change function      */
+/*                                                                        */
+/*  CALLED BY                                                             */
+/*                                                                        */
+/*    Application Code                                                    */
+/*                                                                        */
+/*  RELEASE HISTORY                                                       */
+/*                                                                        */
+/*    DATE              NAME                      DESCRIPTION             */
+/*                                                                        */
+/*  05-19-2020     William E. Lamie         Initial Version 6.0           */
+/*  09-30-2020     Yuxin Zhou               Modified comment(s),          */
+/*                                            resulting in version 6.1    */
+/*                                                                        */
+/**************************************************************************/
+UINT  _txe_timer_change(TX_TIMER *timer_ptr, ULONG initial_ticks, ULONG reschedule_ticks)
+{
+
+UINT    status;
+
+
+    /* Check for an invalid timer pointer.  */
+    if (timer_ptr == TX_NULL)
+    {
+
+        /* Timer pointer is invalid, return appropriate error code.  */
+        status =  TX_TIMER_ERROR;
+    }
+
+    /* Now check for invalid timer ID.  */
+    else if (timer_ptr -> tx_timer_id != TX_TIMER_ID)
+    {
+
+        /* Timer pointer is invalid, return appropriate error code.  */
+        status =  TX_TIMER_ERROR;
+    }
+
+    /* Check for an illegal initial tick value.  */
+    else if (initial_ticks == ((ULONG) 0))
+    {
+
+        /* Invalid initial tick value, return appropriate error code.  */
+        status =  TX_TICK_ERROR;
+    }
+
+    /* Check for invalid caller of this function.  */
+    else if (TX_THREAD_GET_SYSTEM_STATE() >= TX_INITIALIZE_IN_PROGRESS)
+    {
+
+        /* Invalid caller of this function, return appropriate error code.  */
+        status =  TX_CALLER_ERROR;
+    }
+    else
+    {
+
+        /* Call actual application timer function.  */
+        status =  _tx_timer_change(timer_ptr, initial_ticks, reschedule_ticks);
+    }
+
+    /* Return completion status.  */
+    return(status);
+}
+
Index: ctrl/firmware/Main/CubeMX/Middlewares/ST/threadx/common/src/txe_timer_create.c
===================================================================
--- ctrl/firmware/Main/CubeMX/Middlewares/ST/threadx/common/src/txe_timer_create.c	(revision 68)
+++ ctrl/firmware/Main/CubeMX/Middlewares/ST/threadx/common/src/txe_timer_create.c	(revision 68)
@@ -0,0 +1,239 @@
+/**************************************************************************/
+/*                                                                        */
+/*       Copyright (c) Microsoft Corporation. All rights reserved.        */
+/*                                                                        */
+/*       This software is licensed under the Microsoft Software License   */
+/*       Terms for Microsoft Azure RTOS. Full text of the license can be  */
+/*       found in the LICENSE file at https://aka.ms/AzureRTOS_EULA       */
+/*       and in the root directory of this software.                      */
+/*                                                                        */
+/**************************************************************************/
+
+
+/**************************************************************************/
+/**************************************************************************/
+/**                                                                       */
+/** ThreadX Component                                                     */
+/**                                                                       */
+/**   Timer                                                               */
+/**                                                                       */
+/**************************************************************************/
+/**************************************************************************/
+
+#define TX_SOURCE_CODE
+
+
+/* Include necessary system files.  */
+
+#include "tx_api.h"
+#include "tx_initialize.h"
+#include "tx_thread.h"
+#include "tx_timer.h"
+
+
+/**************************************************************************/
+/*                                                                        */
+/*  FUNCTION                                               RELEASE        */
+/*                                                                        */
+/*    _txe_timer_create                                   PORTABLE C      */
+/*                                                           6.1          */
+/*  AUTHOR                                                                */
+/*                                                                        */
+/*    William E. Lamie, Microsoft Corporation                             */
+/*                                                                        */
+/*  DESCRIPTION                                                           */
+/*                                                                        */
+/*    This function checks for errors in the create application timer     */
+/*    function call.                                                      */
+/*                                                                        */
+/*  INPUT                                                                 */
+/*                                                                        */
+/*    timer_ptr                         Pointer to timer control block    */
+/*    name_ptr                          Pointer to timer name             */
+/*    expiration_function               Application expiration function   */
+/*    initial_ticks                     Initial expiration ticks          */
+/*    reschedule_ticks                  Reschedule ticks                  */
+/*    auto_activate                     Automatic activation flag         */
+/*    timer_control_block_size          Size of timer control block       */
+/*                                                                        */
+/*  OUTPUT                                                                */
+/*                                                                        */
+/*    TX_TIMER_ERROR                    Invalid timer control block       */
+/*    TX_TICK_ERROR                     Invalid initial expiration count  */
+/*    TX_ACTIVATE_ERROR                 Invalid timer activation option   */
+/*    TX_CALLER_ERROR                   Invalid caller of this function   */
+/*    status                            Actual completion status          */
+/*                                                                        */
+/*  CALLS                                                                 */
+/*                                                                        */
+/*    _tx_thread_system_preempt_check   Check for preemption              */
+/*    _tx_timer_create                  Actual timer create function      */
+/*                                                                        */
+/*  CALLED BY                                                             */
+/*                                                                        */
+/*    Application Code                                                    */
+/*                                                                        */
+/*  RELEASE HISTORY                                                       */
+/*                                                                        */
+/*    DATE              NAME                      DESCRIPTION             */
+/*                                                                        */
+/*  05-19-2020     William E. Lamie         Initial Version 6.0           */
+/*  09-30-2020     Yuxin Zhou               Modified comment(s),          */
+/*                                            resulting in version 6.1    */
+/*                                                                        */
+/**************************************************************************/
+UINT  _txe_timer_create(TX_TIMER *timer_ptr, CHAR *name_ptr,
+            VOID (*expiration_function)(ULONG id), ULONG expiration_input,
+            ULONG initial_ticks, ULONG reschedule_ticks, UINT auto_activate, UINT timer_control_block_size)
+{
+
+TX_INTERRUPT_SAVE_AREA
+
+UINT            status;
+ULONG           i;
+TX_TIMER        *next_timer;
+#ifndef TX_TIMER_PROCESS_IN_ISR
+TX_THREAD       *thread_ptr;
+#endif
+
+
+    /* Default status to success.  */
+    status =  TX_SUCCESS;
+
+    /* Check for a NULL timer pointer.  */
+    if (timer_ptr == TX_NULL)
+    {
+
+        /* Timer pointer is invalid, return appropriate error code.  */
+        status =  TX_TIMER_ERROR;
+    }
+
+    /* Now check for invalid control block size.  */
+    else if (timer_control_block_size != (sizeof(TX_TIMER)))
+    {
+
+        /* Timer pointer is invalid, return appropriate error code.  */
+        status =  TX_TIMER_ERROR;
+    }
+    else
+    {
+
+        /* Disable interrupts.  */
+        TX_DISABLE
+
+        /* Increment the preempt disable flag.  */
+        _tx_thread_preempt_disable++;
+
+        /* Restore interrupts.  */
+        TX_RESTORE
+
+        /* Next see if it is already in the created list.  */
+        next_timer =  _tx_timer_created_ptr;
+        for (i = ((ULONG) 0); i < _tx_timer_created_count; i++)
+        {
+
+            /* Determine if this timer matches the current timer in the list.  */
+            if (timer_ptr == next_timer)
+            {
+
+                break;
+            }
+            else
+            {
+
+                /* Move to next timer.  */
+                next_timer =  next_timer -> tx_timer_created_next;
+            }
+        }
+
+        /* Disable interrupts.  */
+        TX_DISABLE
+
+        /* Decrement the preempt disable flag.  */
+        _tx_thread_preempt_disable--;
+
+        /* Restore interrupts.  */
+        TX_RESTORE
+
+        /* Check for preemption.  */
+        _tx_thread_system_preempt_check();
+
+        /* At this point, check to see if there is a duplicate timer.  */
+        if (timer_ptr == next_timer)
+        {
+
+            /* Timer is already created, return appropriate error code.  */
+            status =  TX_TIMER_ERROR;
+        }
+
+        /* Check for an illegal initial tick value.  */
+        else if (initial_ticks == ((ULONG) 0))
+        {
+
+            /* Invalid initial tick value, return appropriate error code.  */
+            status =  TX_TICK_ERROR;
+        }
+        else
+        {
+
+            /* Check for an illegal activation.  */
+            if (auto_activate != TX_AUTO_ACTIVATE)
+            {
+
+                /* And activation is not the other value.  */
+                if (auto_activate != TX_NO_ACTIVATE)
+                {
+
+                    /* Invalid activation selected, return appropriate error code.  */
+                    status =  TX_ACTIVATE_ERROR;
+                }
+            }
+        }
+    }
+
+    /* Determine if everything is okay.  */
+    if (status == TX_SUCCESS)
+    {
+
+#ifndef TX_TIMER_PROCESS_IN_ISR
+
+        /* Pickup thread pointer.  */
+        TX_THREAD_GET_CURRENT(thread_ptr)
+
+        /* Check for invalid caller of this function.  First check for a calling thread.  */
+        if (thread_ptr == &_tx_timer_thread)
+        {
+
+            /* Invalid caller of this function, return appropriate error code.  */
+            status =  TX_CALLER_ERROR;
+        }
+#endif
+
+        /* Check for interrupt call.  */
+        if (TX_THREAD_GET_SYSTEM_STATE() != ((ULONG) 0))
+        {
+
+            /* Now, make sure the call is from an interrupt and not initialization.  */
+            if (TX_THREAD_GET_SYSTEM_STATE() < TX_INITIALIZE_IN_PROGRESS)
+            {
+
+                /* Invalid caller of this function, return appropriate error code.  */
+                status =  TX_CALLER_ERROR;
+            }
+        }
+    }
+
+
+    /* Determine if everything is okay.  */
+    if (status == TX_SUCCESS)
+    {
+
+        /* Call actual application timer create function.  */
+        status =  _tx_timer_create(timer_ptr, name_ptr, expiration_function, expiration_input,
+                                                    initial_ticks, reschedule_ticks, auto_activate);
+    }
+
+    /* Return completion status.  */
+    return(status);
+}
+
Index: ctrl/firmware/Main/CubeMX/Middlewares/ST/threadx/common/src/txe_timer_deactivate.c
===================================================================
--- ctrl/firmware/Main/CubeMX/Middlewares/ST/threadx/common/src/txe_timer_deactivate.c	(revision 68)
+++ ctrl/firmware/Main/CubeMX/Middlewares/ST/threadx/common/src/txe_timer_deactivate.c	(revision 68)
@@ -0,0 +1,104 @@
+/**************************************************************************/
+/*                                                                        */
+/*       Copyright (c) Microsoft Corporation. All rights reserved.        */
+/*                                                                        */
+/*       This software is licensed under the Microsoft Software License   */
+/*       Terms for Microsoft Azure RTOS. Full text of the license can be  */
+/*       found in the LICENSE file at https://aka.ms/AzureRTOS_EULA       */
+/*       and in the root directory of this software.                      */
+/*                                                                        */
+/**************************************************************************/
+
+
+/**************************************************************************/
+/**************************************************************************/
+/**                                                                       */
+/** ThreadX Component                                                     */
+/**                                                                       */
+/**   Timer                                                               */
+/**                                                                       */
+/**************************************************************************/
+/**************************************************************************/
+
+#define TX_SOURCE_CODE
+
+
+/* Include necessary system files.  */
+
+#include "tx_api.h"
+#include "tx_timer.h"
+
+
+/**************************************************************************/
+/*                                                                        */
+/*  FUNCTION                                               RELEASE        */
+/*                                                                        */
+/*    _txe_timer_deactivate                               PORTABLE C      */
+/*                                                           6.1          */
+/*  AUTHOR                                                                */
+/*                                                                        */
+/*    William E. Lamie, Microsoft Corporation                             */
+/*                                                                        */
+/*  DESCRIPTION                                                           */
+/*                                                                        */
+/*    This function checks for errors in the deactivate application timer */
+/*    function call.                                                      */
+/*                                                                        */
+/*  INPUT                                                                 */
+/*                                                                        */
+/*    timer_ptr                         Pointer to timer control block    */
+/*                                                                        */
+/*  OUTPUT                                                                */
+/*                                                                        */
+/*    TX_TIMER_ERROR                    Invalid application timer pointer */
+/*    status                            Actual completion status          */
+/*                                                                        */
+/*  CALLS                                                                 */
+/*                                                                        */
+/*    _tx_timer_deactivate              Actual timer deactivation function*/
+/*                                                                        */
+/*  CALLED BY                                                             */
+/*                                                                        */
+/*    Application Code                                                    */
+/*                                                                        */
+/*  RELEASE HISTORY                                                       */
+/*                                                                        */
+/*    DATE              NAME                      DESCRIPTION             */
+/*                                                                        */
+/*  05-19-2020     William E. Lamie         Initial Version 6.0           */
+/*  09-30-2020     Yuxin Zhou               Modified comment(s),          */
+/*                                            resulting in version 6.1    */
+/*                                                                        */
+/**************************************************************************/
+UINT  _txe_timer_deactivate(TX_TIMER *timer_ptr)
+{
+
+UINT    status;
+
+
+    /* Check for an invalid timer pointer.  */
+    if (timer_ptr == TX_NULL)
+    {
+
+        /* Timer pointer is invalid, return appropriate error code.  */
+        status =  TX_TIMER_ERROR;
+    }
+
+    /* Now check for invalid timer ID.  */
+    else if (timer_ptr -> tx_timer_id != TX_TIMER_ID)
+    {
+
+        /* Timer pointer is invalid, return appropriate error code.  */
+        status =  TX_TIMER_ERROR;
+    }
+    else
+    {
+
+        /* Call actual application timer deactivate function.  */
+        status =  _tx_timer_deactivate(timer_ptr);
+    }
+
+    /* Return completion status.  */
+    return(status);
+}
+
