/********************************************************
 * DO NOT CHANGE THIS FILE, IT IS GENERATED AUTOMATICALY*
 ********************************************************/

/* Copyright 2015, Diego Ezequiel Vommaro
 * Copyright 2015, ACSE & CADIEEL
 *      ACSE: http://www.sase.com.ar/asociacion-civil-sistemas-embebidos/ciaa/
 *      CADIEEL: http://www.cadieel.org.ar
 *
 * This file is part of CIAA Firmware.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *
 * 1. Redistributions of source code must retain the above copyright notice,
 *    this list of conditions and the following disclaimer.
 *
 * 2. Redistributions in binary form must reproduce the above copyright notice,
 *    this list of conditions and the following disclaimer in the documentation
 *    and/or other materials provided with the distribution.
 *
 * 3. Neither the name of the copyright holder nor the names of its
 *    contributors may be used to endorse or promote products derived from this
 *    software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 */

/** \brief RTCS Generated Configuration Implementation File
 **
 ** \file Rtcs_Internal_Cfg.c
 **/

/** \addtogroup CIAA_Firmware CIAA Firmware
 ** @{ */
/** \addtogroup RTCS RTCS Implementation
 ** @{ */

/*==================[inclusions]=============================================*/
#include "Rtcs_Internal.h"
<?php
$pdefs = $this->config->getList("/RTCS","INCLUDE_FILE");
$count = 1;
foreach ($pdefs as $pdef)
{
   print "#include \"" . $pdef . "\"\n";
   $count++;
}

?>

/*==================[macros and definitions]=================================*/

/*==================[internal data declaration]==============================*/

/*==================[internal functions declaration]=========================*/

/*==================[internal data definition]===============================*/

/*==================[external data definition]===============================*/
<?php
/* get controllers */
$controllers = $this->config->getList("/RTCS","StateFeedback");

/* configuation loop for each controller */
$count = 1;
foreach ($controllers as $controller)
{
   /* get system type and observer type of the controller */
   /* The system may be "CONTROL_SYSTEM" or "REGULATOR" */
   /* The observer may be "NONE", "FULL" or "REDUCED" */
   /* So there are 6 (six) posibilities, there are 6 six if() sentences */
   $system_type = $this->config->getValue("/RTCS/" . $controller, "SYSTEM_TYPE");
   $observer_type = $this->config->getValue("/RTCS/" . $controller, "OBSERVER_TYPE");

   /* print comments about system and observer types */
   print "\n";
   print "/* Data definition of the closed loop system named " . $controller . " */\n";
   print "/* SYSTEM_TYPE = " . $this->config->getValue("/RTCS/" . $controller, "SYSTEM_TYPE") . " - OBSERVER_TYPE = " . $this->config->getValue("/RTCS/" . $controller, "OBSERVER_TYPE") . " */\n";

   ?>
<?php
   /* system configuration if the system is "CONTROL_SYSTEM" and observer is "NONE" */
   if ($system_type == "CONTROL_SYSTEM" && $observer_type == "NONE"): ?>
<?php    ?>float r_data_<?=$count;?>[<?=$this->config->getValue("/RTCS/" . $controller, "X_SIZE")?>];
<?php    ?>float x_data_<?=$count;?>[<?=$this->config->getValue("/RTCS/" . $controller, "X_SIZE")?>];
<?php    ?>float e_data_<?=$count;?>[<?=$this->config->getValue("/RTCS/" . $controller, "X_SIZE")?>];
<?php    ?>float y_data_<?=$count;?>[<?=$this->config->getValue("/RTCS/" . $controller, "X_SIZE")?>];
<?php    ?>float u_data_<?=$count;?>[<?=$this->config->getValue("/RTCS/" . $controller, "U_SIZE")?>];
<?php    ?>float k_data_<?=$count;?>[<?=$this->config->getValue("/RTCS/" . $controller, "X_SIZE")?>] = {<?=$this->config->getValue("/RTCS/" . $controller, "K_MATRIX")?>};
<?php    ?>Rtcs_ext_matrix_t matrix_array_<?=$count;?>[6];
<?php    ?>Rtcs_statefeedback_data_t controller_<?=$count;?> = {CONTROL_SYSTEM, NONE, <?=$this->config->getValue("/RTCS/" . $controller, "PERIOD")?>, <?=$this->config->getValue("/RTCS/" . $controller, "X_SIZE")?>, <?=$this->config->getValue("/RTCS/" . $controller, "X_SIZE")?>, <?=$this->config->getValue("/RTCS/" . $controller, "X_SIZE")?>, <?=$this->config->getValue("/RTCS/" . $controller, "U_SIZE")?>, <?=$this->config->getValue("/RTCS/" . $controller, "X_SIZE")?>, r_data_<?=$count?>, x_data_<?=$count?>, 0, e_data_<?=$count;?>, u_data_<?=$count;?>, y_data_<?=$count;?>, k_data_<?=$count;?>, 0, 0, 0, 0, 0, 0, 0, &matrix_array_<?=$count;?>[0], &matrix_array_<?=$count?>[1], 0, &matrix_array_<?=$count?>[2], &matrix_array_<?=$count?>[3], &matrix_array_<?=$count?>[4], &matrix_array_<?=$count?>[5], 0, 0, 0, 0, 0, 0, 0, <?=$this->config->getValue("/RTCS/" . $controller, "SEND_FUNCTION")?>, Rtcs_ControlSystemEffort, Rtcs_NoneObserver};
<?php endif

   ?>
<?php
   /* system configuration if the system is "CONTROL_SYSTEM" and observer is "FULL" */
   if ($system_type == "CONTROL_SYSTEM" && $observer_type == "FULL"): ?>
<?php    ?>float r_data_<?=$count;?>[<?=$this->config->getValue("/RTCS/" . $controller, "X_SIZE")?>];
<?php    ?>float x_data_<?=$count;?>[<?=$this->config->getValue("/RTCS/" . $controller, "X_SIZE")?>];
<?php    ?>float xo_data_<?=$count;?>[<?=$this->config->getValue("/RTCS/" . $controller, "X_SIZE")?>];
<?php    ?>float e_data_<?=$count;?>[<?=$this->config->getValue("/RTCS/" . $controller, "X_SIZE")?>];
<?php    ?>float u_y_data_<?=$count;?>[<?=$this->config->getValue("/RTCS/" . $controller, "U_SIZE")?> + <?=$this->config->getValue("/RTCS/" . $controller, "Y_SIZE")?>];
<?php    ?>float k_data_<?=$count;?>[<?=$this->config->getValue("/RTCS/" . $controller, "X_SIZE")?>] = {<?=$this->config->getValue("/RTCS/" . $controller, "K_MATRIX")?>};
<?php    ?>float mf_data_<?=$count;?>[] = {<?=$this->config->getValue("/RTCS/" . $controller, "FUND_MATRIX")?>};
<?php    ?>float mt_data_<?=$count;?>[] = {<?=$this->config->getValue("/RTCS/" . $controller, "TRAN_MATRIX")?>};
<?php    ?>Rtcs_ext_matrix_t matrix_array_<?=$count;?>[10];
<?php    ?>Rtcs_statefeedback_data_t controller_<?=$count;?> = {CONTROL_SYSTEM, FULL, <?=$this->config->getValue("/RTCS/" . $controller, "PERIOD")?>, <?=$this->config->getValue("/RTCS/" . $controller, "X_SIZE")?>, <?=$this->config->getValue("/RTCS/" . $controller, "X_SIZE")?>, <?=$this->config->getValue("/RTCS/" . $controller, "X_SIZE")?>, <?=$this->config->getValue("/RTCS/" . $controller, "U_SIZE")?>, <?=$this->config->getValue("/RTCS/" . $controller, "Y_SIZE")?>, r_data_<?=$count?>, x_data_<?=$count?>, xo_data_<?=$count;?>, e_data_<?=$count;?>, u_y_data_<?=$count;?>, &(u_y_data_<?=$count;?>[<?=$this->config->getValue("/RTCS/" . $controller, "U_SIZE")?>]),k_data_<?=$count;?>, u_y_data_<?=$count;?>, 0, 0, 0, mf_data_<?=$count;?>, mt_data_<?=$count;?>, 0, &matrix_array_<?=$count;?>[0], &matrix_array_<?=$count?>[1], &matrix_array_<?=$count?>[2], &matrix_array_<?=$count?>[3], &matrix_array_<?=$count?>[4], &matrix_array_<?=$count?>[5], &matrix_array_<?=$count?>[6], &matrix_array_<?=$count?>[7], 0, 0, 0, &matrix_array_<?=$count?>[8], &matrix_array_<?=$count?>[9], 0, <?=$this->config->getValue("/RTCS/" . $controller, "SEND_FUNCTION")?>, Rtcs_ControlSystemEffort, Rtcs_FullObserver};
<?php endif

   ?>
<?php
   /* system configuration if the system is "CONTROL_SYSTEM" and observer is "REDUCED" */
   if ($system_type == "CONTROL_SYSTEM" && $observer_type == "REDUCED"): ?>
<?php    ?>float r_data_<?=$count;?>[<?=$this->config->getValue("/RTCS/" . $controller, "X_SIZE")?>];
<?php    ?>float x_data_<?=$count;?>[<?=$this->config->getValue("/RTCS/" . $controller, "X_SIZE")?>];
<?php    ?>float xo_data_<?=$count;?>[<?=$this->config->getValue("/RTCS/" . $controller, "X_SIZE")?> - <?=$this->config->getValue("/RTCS/" . $controller, "Y_SIZE")?>];
<?php    ?>float e_data_<?=$count;?>[<?=$this->config->getValue("/RTCS/" . $controller, "X_SIZE")?>];
<?php    ?>float y_u_data_<?=$count;?>[<?=$this->config->getValue("/RTCS/" . $controller, "Y_SIZE")?> + <?=$this->config->getValue("/RTCS/" . $controller, "U_SIZE")?>];
<?php    ?>float k_data_<?=$count;?>[<?=$this->config->getValue("/RTCS/" . $controller, "X_SIZE")?>] = {<?=$this->config->getValue("/RTCS/" . $controller, "K_MATRIX")?>};
<?php    ?>float l_data_<?=$count;?>[<?=$this->config->getValue("/RTCS/" . $controller, "X_SIZE")?> - <?=$this->config->getValue("/RTCS/" . $controller, "Y_SIZE")?>] = {<?=$this->config->getValue("/RTCS/" . $controller, "L_MATRIX")?>};
<?php    ?>float mf_data_<?=$count;?>[] = {<?=$this->config->getValue("/RTCS/" . $controller, "FUND_MATRIX")?>};
<?php    ?>float mt_data_<?=$count;?>[] = {<?=$this->config->getValue("/RTCS/" . $controller, "TRAN_MATRIX")?>};
<?php    ?>float xo_aux_data_<?=$count;?>[<?=$this->config->getValue("/RTCS/" . $controller, "X_SIZE")?> - <?=$this->config->getValue("/RTCS/" . $controller, "Y_SIZE")?>];
<?php    ?>Rtcs_ext_matrix_t matrix_array_<?=$count;?>[12];
<?php    ?>Rtcs_statefeedback_data_t controller_<?=$count;?> = {CONTROL_SYSTEM, REDUCED, <?=$this->config->getValue("/RTCS/" . $controller, "PERIOD")?>, <?=$this->config->getValue("/RTCS/" . $controller, "X_SIZE")?>, <?=$this->config->getValue("/RTCS/" . $controller, "X_SIZE")?>, <?=$this->config->getValue("/RTCS/" . $controller, "X_SIZE")?>, <?=$this->config->getValue("/RTCS/" . $controller, "U_SIZE")?>, <?=$this->config->getValue("/RTCS/" . $controller, "Y_SIZE")?>, r_data_<?=$count?>, x_data_<?=$count?>, xo_data_<?=$count;?>, e_data_<?=$count;?>, &(y_u_data_<?=$count;?>[<?=$this->config->getValue("/RTCS/" . $controller, "Y_SIZE")?>]), y_u_data_<?=$count;?>,k_data_<?=$count;?>, y_u_data_<?=$count;?>, 0, 0, l_data_<?=$count;?>, mf_data_<?=$count;?>, mt_data_<?=$count;?>, xo_aux_data_<?=$count;?>, &matrix_array_<?=$count;?>[0], &matrix_array_<?=$count?>[1], &matrix_array_<?=$count?>[2], &matrix_array_<?=$count?>[3], &matrix_array_<?=$count?>[4], &matrix_array_<?=$count?>[5], &matrix_array_<?=$count?>[6], &matrix_array_<?=$count?>[7], 0, 0, &matrix_array_<?=$count?>[8], &matrix_array_<?=$count?>[9], &matrix_array_<?=$count?>[10], &matrix_array_<?=$count?>[11], <?=$this->config->getValue("/RTCS/" . $controller, "SEND_FUNCTION")?>, Rtcs_ControlSystemEffort, Rtcs_ReducedObserver};
<?php endif

   ?>
<?php
   /* system configuration if the system is "REGULATOR" and observer is "NONE" */
   if ($system_type == "REGULATOR" && $observer_type == "NONE"): ?>
<?php    ?>float x_data_<?=$count;?>[<?=$this->config->getValue("/RTCS/" . $controller, "X_SIZE")?>];
<?php    ?>float y_data_<?=$count;?>[<?=$this->config->getValue("/RTCS/" . $controller, "X_SIZE")?>];
<?php    ?>float u_data_<?=$count;?>[<?=$this->config->getValue("/RTCS/" . $controller, "U_SIZE")?>];
<?php    ?>float k_data_<?=$count;?>[<?=$this->config->getValue("/RTCS/" . $controller, "X_SIZE")?>] = {<?=$this->config->getValue("/RTCS/" . $controller, "K_MATRIX")?>};
<?php    ?>Rtcs_ext_matrix_t matrix_array_<?=$count;?>[4];
<?php    ?>Rtcs_statefeedback_data_t controller_<?=$count;?> = {REGULATOR, NONE, <?=$this->config->getValue("/RTCS/" . $controller, "PERIOD")?>, 0, <?=$this->config->getValue("/RTCS/" . $controller, "X_SIZE")?>, 0, <?=$this->config->getValue("/RTCS/" . $controller, "U_SIZE")?>, <?=$this->config->getValue("/RTCS/" . $controller, "X_SIZE")?>, 0, x_data_<?=$count?>, 0, 0, u_data_<?=$count;?>, y_data_<?=$count;?>, k_data_<?=$count;?>, 0, 0, 0, 0, 0, 0, 0, 0, &matrix_array_<?=$count?>[0], 0, 0, &matrix_array_<?=$count?>[1], &matrix_array_<?=$count?>[2], &matrix_array_<?=$count?>[3], 0, 0, 0, 0, 0, 0, 0, <?=$this->config->getValue("/RTCS/" . $controller, "SEND_FUNCTION")?>, Rtcs_RegulatorControlEffort, Rtcs_NoneObserver};
<?php endif

   ?>
<?php
   /* system configuration if the system is "REGULATOR" and observer is "FULL" */
if ($system_type == "REGULATOR" && $observer_type == "FULL"): ?>
<?php    ?>float x_data_<?=$count;?>[<?=$this->config->getValue("/RTCS/" . $controller, "X_SIZE")?>];
<?php    ?>float xo_data_<?=$count;?>[<?=$this->config->getValue("/RTCS/" . $controller, "X_SIZE")?>];
<?php    ?>float u_y_data_<?=$count;?>[<?=$this->config->getValue("/RTCS/" . $controller, "U_SIZE")?> + <?=$this->config->getValue("/RTCS/" . $controller, "Y_SIZE")?>];
<?php    ?>float k_data_<?=$count;?>[<?=$this->config->getValue("/RTCS/" . $controller, "X_SIZE")?>] = {<?=$this->config->getValue("/RTCS/" . $controller, "K_MATRIX")?>};
<?php    ?>float mf_data_<?=$count;?>[] = {<?=$this->config->getValue("/RTCS/" . $controller, "FUND_MATRIX")?>};
<?php    ?>float mt_data_<?=$count;?>[] = {<?=$this->config->getValue("/RTCS/" . $controller, "TRAN_MATRIX")?>};
<?php    ?>Rtcs_ext_matrix_t matrix_array_<?=$count;?>[8];
<?php    ?>Rtcs_statefeedback_data_t controller_<?=$count;?> = {REGULATOR, FULL, <?=$this->config->getValue("/RTCS/" . $controller, "PERIOD")?>, 0, <?=$this->config->getValue("/RTCS/" . $controller, "X_SIZE")?>, 0, <?=$this->config->getValue("/RTCS/" . $controller, "U_SIZE")?>, <?=$this->config->getValue("/RTCS/" . $controller, "Y_SIZE")?>, 0, x_data_<?=$count?>, xo_data_<?=$count;?>, 0, u_y_data_<?=$count;?>, &(u_y_data_<?=$count;?>[<?=$this->config->getValue("/RTCS/" . $controller, "U_SIZE")?>]),k_data_<?=$count;?>, u_y_data_<?=$count;?>, 0, 0, 0, mf_data_<?=$count;?>, mt_data_<?=$count;?>, 0, 0, &matrix_array_<?=$count?>[0], &matrix_array_<?=$count?>[1], 0, &matrix_array_<?=$count?>[2], &matrix_array_<?=$count?>[3], &matrix_array_<?=$count?>[4], &matrix_array_<?=$count?>[5], 0, 0, 0, &matrix_array_<?=$count?>[6], &matrix_array_<?=$count?>[7], 0, <?=$this->config->getValue("/RTCS/" . $controller, "SEND_FUNCTION")?>, Rtcs_RegulatorControlEffort, Rtcs_FullObserver};
<?php endif

   ?>
<?php
   /* system configuration if the system is "REGULATOR" and observer is "REDUCED" */
   if ($system_type == "REGULATOR" && $observer_type == "REDUCED"): ?>
<?php    ?>float x_data_<?=$count;?>[<?=$this->config->getValue("/RTCS/" . $controller, "X_SIZE")?>];
<?php    ?>float xo_data_<?=$count;?>[<?=$this->config->getValue("/RTCS/" . $controller, "X_SIZE")?> - <?=$this->config->getValue("/RTCS/" . $controller, "Y_SIZE")?>];
<?php    ?>float y_u_data_<?=$count;?>[<?=$this->config->getValue("/RTCS/" . $controller, "Y_SIZE")?> + <?=$this->config->getValue("/RTCS/" . $controller, "U_SIZE")?>];
<?php    ?>float k_data_<?=$count;?>[<?=$this->config->getValue("/RTCS/" . $controller, "X_SIZE")?>] = {<?=$this->config->getValue("/RTCS/" . $controller, "K_MATRIX")?>};
<?php    ?>float l_data_<?=$count;?>[<?=$this->config->getValue("/RTCS/" . $controller, "X_SIZE")?> - <?=$this->config->getValue("/RTCS/" . $controller, "Y_SIZE")?>] = {<?=$this->config->getValue("/RTCS/" . $controller, "L_MATRIX")?>};
<?php    ?>float mf_data_<?=$count;?>[] = {<?=$this->config->getValue("/RTCS/" . $controller, "FUND_MATRIX")?>};
<?php    ?>float mt_data_<?=$count;?>[] = {<?=$this->config->getValue("/RTCS/" . $controller, "TRAN_MATRIX")?>};
<?php    ?>float xo_aux_data_<?=$count;?>[<?=$this->config->getValue("/RTCS/" . $controller, "X_SIZE")?> - <?=$this->config->getValue("/RTCS/" . $controller, "Y_SIZE")?>];
<?php    ?>Rtcs_ext_matrix_t matrix_array_<?=$count;?>[10];
<?php    ?>Rtcs_statefeedback_data_t controller_<?=$count;?> = {REGULATOR, REDUCED, <?=$this->config->getValue("/RTCS/" . $controller, "PERIOD")?>, 0, <?=$this->config->getValue("/RTCS/" . $controller, "X_SIZE")?>, 0, <?=$this->config->getValue("/RTCS/" . $controller, "U_SIZE")?>, <?=$this->config->getValue("/RTCS/" . $controller, "Y_SIZE")?>, 0, x_data_<?=$count?>, xo_data_<?=$count;?>, 0, &(y_u_data_<?=$count;?>[<?=$this->config->getValue("/RTCS/" . $controller, "Y_SIZE")?>]), y_u_data_<?=$count;?>,k_data_<?=$count;?>, y_u_data_<?=$count;?>, 0, 0, l_data_<?=$count;?>, mf_data_<?=$count;?>, mt_data_<?=$count;?>, xo_aux_data_<?=$count;?>, 0, &matrix_array_<?=$count?>[0], &matrix_array_<?=$count?>[1], 0, &matrix_array_<?=$count?>[2], &matrix_array_<?=$count?>[3], &matrix_array_<?=$count?>[4], &matrix_array_<?=$count?>[5], 0, 0, &matrix_array_<?=$count?>[6], &matrix_array_<?=$count?>[7], &matrix_array_<?=$count?>[8], &matrix_array_<?=$count?>[9], <?=$this->config->getValue("/RTCS/" . $controller, "SEND_FUNCTION")?>, Rtcs_RegulatorControlEffort, Rtcs_ReducedObserver};
<?php endif

   ?>
<?php
    $count++;
}

?>

<?php
/* Print comment about reserving of memory to allocate the generic controller structure */
print "/* Definition of the Generic Controller Data */\n";

/* counter reset */
$count = 1;

/* configuration loop to allocate and set  whole generic controller structure */
foreach ($controllers as $controller)
{
   ?>Rtcs_generic_controller_t Rtcs_controllers_data_<?=$count;?> = {Rtcs_StateFeedbackFirstRun, &controller_<?=$count;?>};
<?php
   /* increment count */
   $count++;
}?>

<?php
print "/* Definition of the Controllers List wich has ". count($controllers) . " elements */\n";
?>
Rtcs_generic_controller_t *Rtcs_controllers_list[CONTROLLERS_LIST_SIZE] = {<?php

/* counter reset */
$count = 1;

/* configuration loop to set the generic controller array with the corresponding controller data */
foreach ($controllers as $controller)
{
   ?>&Rtcs_controllers_data_<?=$count;?>
<?php
   if ($count < count($controllers)): ?>
, <?php endif ?>
<?php
   /* increment count */
   $count++;
}
?>};

/*==================[internal functions definition]==========================*/

/*==================[external functions definition]==========================*/

/** @} doxygen end group definition */
/** @} doxygen end group definition */
/*==================[end of file]============================================*/
