/*
 * File: ert_main.c
 *
 * Code generated for Simulink model 'SystemObjectTest_HandEdit'.
 *
 * Model version                  : 2.440
 * Simulink Coder version         : 9.4 (R2020b) 29-Jul-2020
 * C/C++ source code generated on : Thu Jan 27 07:29:02 2022
 *
 * Target selection: ert.tlc
 * Embedded hardware selection: Texas Instruments->C2000
 * Code generation objectives:
 *    1. Debugging
 *    2. Traceability
 * Validation result: Not run
 */

#include "SystemObjectTest_HandEdit.h"
#include "rtwtypes.h"

#include "control.h"
#include "i2cdrv.h"
#include "sedrv.h"

volatile int IsrOverrun = 0;
static boolean_T OverrunFlag = 0;

static void _processLoop(void)
{
    // Setup for process calls
    // NOTE: Offset so they don't all fire on the same loop
    Uint32 currTimeMs = tmrdrvGetUptimeMs();
    Uint32 next1msTimeMs = currTimeMs;
    Uint32 next5msTimeMs = currTimeMs + 5;
    Uint32 next10msTimeMs = currTimeMs + 10 + 1;
    Uint32 next100msTimeMs = currTimeMs + 100 + 1 + 1;

    for (;;)
    {
        currTimeMs = tmrdrvGetUptimeMs(); //uses timer1

        // 1ms
        if (currTimeMs >= next1msTimeMs)
        {
            ++next1msTimeMs;
            _process1ms();
        }

        // 5ms
        if (currTimeMs >= next5msTimeMs)
        {
            next5msTimeMs += 5;
            //_process5ms();
        }

        // 10ms
        if (currTimeMs >= next10msTimeMs)
        {
            next10msTimeMs += 10;
            //_process10ms();
        }

        // 100ms
        if (currTimeMs >= next100msTimeMs)
        {
            next100msTimeMs += 100;
            //_process100ms();
        }
    }
}

void rt_OneStep(void)
{
  /* Check for overrun. Protect OverrunFlag against preemption */
  if (OverrunFlag++) {
    IsrOverrun = 1;
    OverrunFlag--;
    return;
  }

  enableTimer0Interrupt();
  SystemObjectTest_HandEdit_step();

  /* Get model outputs here */
  disableTimer0Interrupt();
  OverrunFlag--;
}

volatile boolean_T stopRequested;
volatile boolean_T runModel;
int main(void)
{
  float modelBaseRate = 0.001;
  float systemClock = 90;

  /* Initialize variables */
  stopRequested = false;
  runModel = false;
  c2000_flash_init();
  init_board();

#ifdef MW_EXEC_PROFILER_ON

  config_profilerTimer();

#endif

  ;
  bootloaderInit();
  ((void) 0);
  SystemObjectTest_HandEdit_initialize();
  globalInterruptDisable();
  configureTimer0(modelBaseRate, systemClock);
  runModel = true;
  enableTimer0Interrupt();
  globalInterruptEnable();
  while (runModel) {
      _processLoop();
  }

  /* Disable rt_OneStep() here */

  /* Terminate model */
  SystemObjectTest_HandEdit_terminate();
  globalInterruptDisable();
  return 0;
}

/*
 * File trailer for generated code.
 *
 * [EOF]
 */
