/* * oscil_can.h * * Created on: 24 мая 2020 г. * Author: yura */ #ifndef SRC_LIBS_NIO12_OSCIL_CAN_H_ #define SRC_LIBS_NIO12_OSCIL_CAN_H_ #define OSCIL_CODE_STATUS_LOG_STOP 1 // Лог остановлен #define OSCIL_CODE_STATUS_LOG_RUN 2 // Лог идет... #define OSCIL_CODE_STATUS_LOG_RUN_TO_STOP 3 // Лог идет, но идет дозапись, скоро остановится. #define OSCIL_CAN_NUMBER_CHANNEL 32 // максимальное возможное кол-во каналов для буфера #define OSCIL_CAN_NUMBER_POINTS 500 // максимальное возможное кол-во точек для буфера (для одного канала) #define OSCIL_TIME_WAIT 5000 // период посылки всего массива в CAN (млсек) #define OSCIL_CAN_NUMBER_POINTS_ADD 100 // запас точек при выполнении функции копирования рабочего буфера во временный. oscil_buffer->temp_oscil_buffer #define OSCIL_CAN_NUMBER_POINTS_AFTER_STOP 100 // сколько точек записывать после остановки записи буфера по аварии или шиму typedef struct { int oscil_buffer[OSCIL_CAN_NUMBER_CHANNEL][OSCIL_CAN_NUMBER_POINTS+OSCIL_CAN_NUMBER_POINTS_ADD]; int temp_oscil_buffer[OSCIL_CAN_NUMBER_CHANNEL][OSCIL_CAN_NUMBER_POINTS]; unsigned int global_enable; unsigned int number_ch; unsigned int number_points; unsigned int step; unsigned int send_after_cmd; unsigned int cmd_send; unsigned int current_step; unsigned int enable_rewrite; unsigned int current_position; unsigned int timer_send; unsigned int code_status_log; unsigned int status_error; // статус аварии 0-нет аварии/1- есть unsigned int status_pwm; // статус ШИМа 0-Шим не запущен/1-запущен unsigned int stop_update_on_error; // остановим обновление буфера по аварии unsigned int stop_update_on_stop_pwm; // остановим обновление буфера по стопу ШИМа int number_can_box_terminal_oscil; int number_can_box_terminal_cmd; unsigned int pause_can; // пауза между посылками CAN void (*clear)(); // Clear buffers void (*send)(); // Send buffers void (*set_next_position)(); // Set next position in buffers void (*prepare_data_can)(); // Set next position in buffers } OSCIL_CAN; typedef OSCIL_CAN *OSCIL_CAN_handle; #define OSCIL_CAN_DEFAULTS { {0},{0}, \ 0, \ OSCIL_CAN_NUMBER_CHANNEL, \ OSCIL_CAN_NUMBER_POINTS, \ 1, \ 0, \ 0, \ 0, \ 1, \ 0, \ 0, \ 0, \ 0, \ 0, \ 1, \ 1, \ 0,0, \ OSCIL_TIME_WAIT, \ oscil_clear_buffer, \ oscil_send_buffer, \ oscil_next_position, \ oscil_prepare_data_can \ } void oscil_clear_buffer(OSCIL_CAN_handle); void oscil_send_buffer(OSCIL_CAN_handle); void oscil_next_position(OSCIL_CAN_handle); void oscil_prepare_data_can(OSCIL_CAN_handle); extern OSCIL_CAN oscil_can; #endif /* SRC_LIBS_NIO12_OSCIL_CAN_H_ */