/*
 * control_station_project.h
 *
 *  Created on: 1 июн. 2020 г.
 *      Author: Yura
 */

#ifndef SRC_MAIN_CONTROL_STATION_PROJECT_H_
#define SRC_MAIN_CONTROL_STATION_PROJECT_H_


#define POS_STATION_CMD_ANOTHER_BSU1    15 // позиция в массиве для CONTROL_STATION_CMD для передачи в другой БС


// какие посты возможны:
/*
 * терминал - RS232 - дистанция от PC
 * терминал - CAN - дистанция от PC
 * пульт ingeteam - RS485
 * пульт МПУ СВУ- RS485
 * пульт МПУ СВУ - CAN
 * пульт МПУ Клава - RS485
 * пульт МПУ Клава - CAN
 * Задатчик на бсу - CAN
 * Задатчик ВПУ - CAN
 * Задатчик ВПУ2 - CAN
 * Задатчик ВПУ-АП - CAN
 *
 */

enum
{
 CONTROL_STATION_TERMINAL_RS232    =      0,
 CONTROL_STATION_TERMINAL_CAN,

 CONTROL_STATION_INGETEAM_PULT_RS485,
 CONTROL_STATION_MPU_SVU_CAN, // svu
 CONTROL_STATION_MPU_KEY_CAN, // bsu key
 CONTROL_STATION_MPU_SVU_RS485, // ?
 CONTROL_STATION_MPU_KEY_RS485, // ?
 CONTROL_STATION_ZADATCHIK_CAN, // bsu zo
 CONTROL_STATION_VPU_CAN, // vpu
 CONTROL_STATION_ANOTHER_BS, // от другого БС в режиме slave/master
 CONTROL_STATION_LAST  // последний код в списке, всегда должен быть, не удалять его, используем для размерности массива.
};


enum
{
 CONTROL_STATION_CMD_GO    =      0,// cmd_go от поста пуск/стоп ШИМа
 CONTROL_STATION_CMD_SET_IZAD,// ток от поста
 CONTROL_STATION_CMD_SET_ROTOR,// обороты от поста
 CONTROL_STATION_CMD_SET_POWER,// мощность от поста
 CONTROL_STATION_CMD_CHARGE,   // сбор схемы от поста
 CONTROL_STATION_CMD_UNCHARGE, // разбор схемы от поста
 CONTROL_STATION_CMD_CHECKBACK,// квитирование от поста
 CONTROL_STATION_CMD_TEST_LEDS,// тест ламп от поста
 CONTROL_STATION_CMD_ACTIVE_CONTROL,// этот пост активирован, например галочка Дистанция включена на терминалке.
                                    // а на каких-то постах внешние переключатели включены
 CONTROL_STATION_CMD_UFCONST_VECTOR,// Mode 0-ufconst, 1 - скаляр/векторное
 CONTROL_STATION_CMD_ROTOR_POWER,   // Mode 0-обороты, 1 - мощность
 CONTROL_STATION_CMD_SCALAR_FOC,   // Mode 0-скаляр, 1 - векторное
 CONTROL_STATION_CMD_SET_KM,// Km для  Mode 0-ufconst
// CONTROL_STATION_CMD_SET_I_VOZBUD, // Задание тока возбудителя
 CONTROL_STATION_CMD_SET_U_ZARYAD, // Задание напряжения заряда ЗПТ
 CONTROL_STATION_CMD_SET_K_U_DISBALANCE, // Задание К напряжения дисбаланса коэф. обратной связи по дисбалансу, надо >0 чтоб работал алгоритм
 CONTROL_STATION_CMD_SET_K_PLUS_U_DISBALANCE, //kplus_u_disbalance, если =0, то работает алгоритм дисбаланса, считается это коэф. автоматом, если <>0 то он задан постоянным.
 CONTROL_STATION_CMD_MODE_PUMP, //режим работы насоса // // 0 - auto on - rand pump
                                 // 1 - auto on  1 pump
                                 // 2 - auto on  2 pump
                                 // 3 - manual on 1 pump
                                 // 4 - manual on 2 pump
                                 // 5- переход из manual в непонятное состояние
 CONTROL_STATION_CMD_DISABLE_ON_PUMP,
 CONTROL_STATION_CMD_ENABLE_ON_CHARGE,
 CONTROL_STATION_CMD_DISABLE_ON_QTV,
 CONTROL_STATION_CMD_MANUAL_DISCHARGE,
 CONTROL_STATION_CMD_DISABLE_ON_UMP,
 CONTROL_STATION_CMD_WDOG_OFF,
 CONTROL_STATION_CMD_SET_LIMIT_POWER,// запас мощность от поста
 CONTROL_STATION_CMD_BLOCK_BS,  // блокировка с верхнего уровня
 CONTROL_STATION_CMD_DISABLE_INTERRUPT_SYNC,
 CONTROL_STATION_CMD_DISABLE_INTERRUPT_TIMER2,
 CONTROL_STATION_CMD_DISABLE_RASCEPITEL, // не управлять расцепителем, если он сведен и не работает мотор расцепителя
 CONTROL_STATION_CMD_PWM_TEST_LINES, // шим линии на 96пин шине как тестовые, только для теста!!!
 CONTROL_STATION_CMD_STOP_LOGS, // стоп логов
 CONTROL_STATION_CMD_LAST     // последний код в списке, всегда должен быть, не удалять его, используем для размерности массива.
};


void control_station_test_alive_all_control(void);
int control_station_select_active(void);
int get_current_station_control(void);
void load_parameters_from_active_control_station(int current_control);
void parse_parameters_from_all_control_station(void);
void parse_parameters_from_one_control_station_terminal_rs232(int cc);
void parse_parameters_from_one_control_station_pult_ingeteam(int cc);
void parse_parameters_from_one_control_station_pult_zadat4ik(int cc);
void parse_parameters_from_one_control_station_pult_vpu(int cc);
void parse_parameters_from_one_control_station_another_bs(int cc);
void parse_parameters_from_one_control_station_MPU_SVU(int cc);

void parse_analog_data_from_active_control_station_to_alg(void);
void parse_data_from_master_to_alg(void);

void load_parameters_from_can_control_station_to_rs232(void);


#endif /* SRC_MAIN_CONTROL_STATION_PROJECT_H_ */
