/* * synhro_tools.c * * Created on: 13 нояб. 2024 г. * Author: Evgeniy_Sokolov */ #include #include #include #include #include #include #include #include "IQmathLib.h" #include "mathlib.h" #include "optical_bus.h" #include "sync_tools.h" ////////////////////////////////////////////////////////// unsigned int wait_synhro_optical_bus(void) { static unsigned int cmd = 0; static unsigned int count_wait_synhro = 0; // // switch(cmd) // { // 0 : if (optical_read_data.data.cmd.bit.wdog_tick == 0) // cmd = 1; // // break; // // 1 : optical_write_data.data.cmd.bit.wdog_tick = 1; // break; // // // default: break // } return 0; } ////////////////////////////////////////////////////////// void clear_wait_synhro_optical_bus(void) { // optical_read_data.data.cmd.bit.wdog_tick = 0; // optical_write_data.data.cmd.bit.wdog_tick = 0; } ////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////// void who_select_sync_signal(void) { if (sync_data.what_main_pch) { if (sync_data.what_main_pch==2) { // принудительно всегда !!! if (edrk.flag_second_PCH) sync_data.enable_do_sync = 1; else sync_data.enable_do_sync = 0; return; } if (sync_data.what_main_pch==1) { // принудительно всегда !!! if (edrk.flag_second_PCH) sync_data.enable_do_sync = 0; else sync_data.enable_do_sync = 1; return; } } // if (optical_read_data.status == 1) sync_data.global_flag_sync_1_2 = (sync_data.local_flag_sync_1_2 || optical_read_data.data.cmd.bit.sync_1_2); // else // sync_data.global_flag_sync_1_2 = (sync_data.local_flag_sync_1_2); if (sync_data.timeout_sync_signal && optical_read_data.data.cmd.bit.sync_line_detect) { // этот БС не принимает синхро, а второй принимает, значит на этом отключаем синхронизацию // синхронизируется тот борт сам. sync_data.enable_do_sync = 0; return; } if (sync_data.timeout_sync_signal==0 && optical_read_data.data.cmd.bit.sync_line_detect==0) { // этот БС принимает синхро, а второй не принимает, значит на этом принудительно включаем синхронизацию // синхронизируется этот борт сам. sync_data.enable_do_sync = 1; return; } if (sync_data.sync_ready && sync_data.timeout_sync_signal==0 && optical_read_data.data.cmd.bit.sync_line_detect) { if (optical_read_data.data.cmd.bit.sync_1_2 && sync_data.enable_do_sync==0) { // уже есть синхрон, другой БС смог это сделать и он сам это сделал } else if (optical_read_data.data.cmd.bit.sync_1_2 && sync_data.enable_do_sync==1) { // уже есть синхрон, другой БС смог это сделать и он не сам это сделал, а от нас } else { // нет синхронизации, значит выбираем кто это будет делать в автомате // этот БС принимает синхро и второй принимает, значит синхронизация // выбирается в зависимости от номера БС. if (edrk.flag_second_PCH==0) sync_data.enable_do_sync = 1; else sync_data.enable_do_sync = 0; } return; } } //////////////////////////////////////////////////////////