///////////////////////////////////////////////////////////////////////////////////////////////////
//
// M A I N
//
///////////////////////////////////////////////////////////////////////////////////////////////////
void main(void){
main_on_reset:
main_on_reset();
do{
/////////////////////////////////////////////////////////////////////////////////////////////
//
// Registra estado de Entradas Digitales
//
/////////////////////////////////////////////////////////////////////////////////////////////
task_registry_digital_sensors();
// Si hay cambio estable en STATUS ...
if(flag_change_STATUS_stable==1){
flag_change_STATUS_stable=0;
...
}
/////////////////////////////////////////////////////////////////////////////////////////////
//
// Detecta y Ejecuta la necesidad de Realizar un Reset por Software
// realizando la secuencia normal implementada en main_on_reset()
//
/////////////////////////////////////////////////////////////////////////////////////////////
if(flag_force_Reset==1){
...
}
/////////////////////////////////////////////////////////////////////////////////////////////
//
// Detecta y Ejecuta la necesidad de Actualizar el Firmware mediante el Bootloader
// Escribe la marca de EEINT_Device_Status_Firmware en la EEPROM interna y ejecuta el bootloader.
//
/////////////////////////////////////////////////////////////////////////////////////////////
if(flag_force_Boot==1){
...
}
/////////////////////////////////////////////////////////////////////////////////////////////
//
// Detecta necesidad de procesar el buffer USART
// y lo procesa en la rutina correspondiente.
//
/////////////////////////////////////////////////////////////////////////////////////////////
if(flag_recUSARTComplete==1 or flag_USART_Time_Out_Error==1){
// Filtra recepcion por canal RS485
if(flag_RS485_reception_active==1){
flag_RS485_reception_active=0;
.....
}
else ...
}
/////////////////////////////////////////////////////////////////////////////////////////////
//
// Detecta necesidad de desactivar alguno de los Relés
// desactiva el rele y el flag correspondiente.
//
/////////////////////////////////////////////////////////////////////////////////////////////
if(flag_RELAY_1_elapsed==1){
flag_RELAY_1_elapsed=0;
...
}
if(flag_RELAY_2_elapsed==1){
flag_RELAY_2_elapsed=0;
...
}
/////////////////////////////////////////////////////////////////////////////////////////////
//
// Detecta Lectura Completa en HEAD1 o timeout de <XRHEAD,1,...>
// transmite y/o registra y desactiva el flag
//
/////////////////////////////////////////////////////////////////////////////////////////////
// Si lectura completa de HEAD1
if(flag_Head1_Read_Complete==1 OR flag_RHEAD1_timeout==1){
flag_Head1_Read_Complete=0;
// si no acaba de realizarse una conmutacion set_to_i2c_channel()
if(flag_after_CD4053_Comnutation==1){
flag_after_CD4053_Comnutation=0;
...
}
else{
// Realizo las tareas necesarias tras una lectura completa de HEAD1.
...
}
}
// Si lectura completa de HEAD2
if(flag_Head2_Read_Complete==1 OR flag_RHEAD2_timeout==1){
flag_Head2_Read_Complete=0;
// Realizo las tareas necesarias tras una lectura completa de HEAD2.
...
}
/////////////////////////////////////////////////////////////////////////////////////////////
//
// Detecta timeout por ausencia de respuesta del Server
//
/////////////////////////////////////////////////////////////////////////////////////////////
// No hay <RQUERY> o respuesta <XRQST,1...> para >DQRST,1...>
if(flag_REQUEST_timeout1==1){
flag_REQUEST_timeout1=0;
flag_REQUEST_Pending1=0;
// No recibo a tiempo <RQUERY> o <XRQST> No hay Polling y estoy en alguno de los modos que lo requieren.
...
}
// No hay <RQUERY> o respuesta <XRQST,2...> para >DQRST,2...>
if(flag_REQUEST_timeout2==1){
flag_REQUEST_timeout2=0;
flag_REQUEST_Pending2=0;
// No recibo a tiempo <RQUERY> o <XRQST> No hay Polling y estoy en alguno de los modos que lo requieren.
...
}
/////////////////////////////////////////////////////////////////////////////////////////////
//
// Detecta timeout por ausencia de respuesta del Canal RS485
//
/////////////////////////////////////////////////////////////////////////////////////////////
if(flag_RS485_elapsed==1){
flag_RS485_elapsed=0;
...
}
/////////////////////////////////////////////////////////////////////////////////////////////
//
// Detecta Segnal de Card Present en Cabezal 1 o Cabezal 2
// y ...
//
/////////////////////////////////////////////////////////////////////////////////////////////
if(flag_RHEAD1_Card_Present==1 OR flag_RHEAD2_Card_Present==1){
...
}
/////////////////////////////////////////////////////////////////////////////////////////////
}while(1);
}