/*
 * RS_Function_terminal.h
 *
 *  Created on: 12 нояб. 2020 г.
 *      Author: stud
 */

#ifndef SRC_XILINX_NIO12_RS_FUNCTION_TERMINAL_H_
#define SRC_XILINX_NIO12_RS_FUNCTION_TERMINAL_H_

#include "RS_Functions.h"


typedef struct
{
    CHAR analog1_lo;    // младший байт заданной скорости
    CHAR analog1_hi;    // старший байт заданной скорости
    CHAR analog2_lo;    // младший байт заданной скорости
    CHAR analog2_hi;    // старший байт заданной скорости
    CHAR analog3_lo;    // младший байт заданной скорости
    CHAR analog3_hi;    // старший байт заданной скорости
    //Добавлено длЯ Ледокола
    CHAR analog4_lo;    // младший байт заданной скорости
    CHAR analog4_hi;    // старший байт заданной скорости
    CHAR analog5_lo;    // младший байт заданной скорости
    CHAR analog5_hi;    // старший байт заданной скорости
    CHAR analog6_lo;    // младший байт заданной скорости
    CHAR analog6_hi;    // старший байт заданной скорости

//
    CHAR analog7_lo;    // младший байт заданной скорости
    CHAR analog7_hi;    // старший байт заданной скорости
    CHAR analog8_lo;    // младший байт заданной скорости
    CHAR analog8_hi;    // старший байт заданной скорости
    CHAR analog9_lo;    // младший байт заданной скорости
    CHAR analog9_hi;    // старший байт заданной скорости
    CHAR analog10_lo;    // младший байт заданной скорости
    CHAR analog10_hi;    // старший байт заданной скорости
    CHAR analog11_lo;    // младший байт заданной скорости
    CHAR analog11_hi;    // старший байт заданной скорости
    CHAR analog12_lo;    // младший байт заданной скорости
    CHAR analog12_hi;    // старший байт заданной скорости
    CHAR analog13_lo;    // младший байт заданной скорости
    CHAR analog13_hi;    // старший байт заданной скорости
    CHAR analog14_lo;    // младший байт заданной скорости
    CHAR analog14_hi;    // старший байт заданной скорости
    CHAR analog15_lo;    // младший байт заданной скорости
    CHAR analog15_hi;    // старший байт заданной скорости


} CMD_ANALOG_DATA_STRUCT;

typedef union
{
    struct
    {
        unsigned int bit0:  1;
        unsigned int bit1:  1;
        unsigned int bit2:  1;
        unsigned int bit3:  1;
        unsigned int bit4:  1;
        unsigned int bit5:  1;
        unsigned int bit6:  1;
        unsigned int bit7:  1;
    } bit_data;             // Дискретные величины посылки побитно
    CHAR byte_data;         // Дискретные величины посылки вместе
} CMD_DIGIT_BYTE_STRUCT;            // Дискретные величины

typedef struct
{
    CMD_DIGIT_BYTE_STRUCT Byte01;
    CMD_DIGIT_BYTE_STRUCT Byte02;
    CMD_DIGIT_BYTE_STRUCT Byte03;
    CMD_DIGIT_BYTE_STRUCT Byte04;

    CMD_DIGIT_BYTE_STRUCT Byte05;
    CMD_DIGIT_BYTE_STRUCT Byte06;

} CMD_DIGIT_DATA_STRUCT;

typedef struct
{
    CHAR Address;           // Адрес контроллера
    CHAR Number;            // Номер команды
} CMD_TMS_HEAD_STRUCT;

typedef struct
{
    // Заголовок
    CMD_TMS_HEAD_STRUCT head;

    // Аналоговые величины
    CMD_ANALOG_DATA_STRUCT analog_data;

    // Цифровые значениy
    CMD_DIGIT_DATA_STRUCT digit_data;

    // Контрольнаy сумма
    CHAR crc_lo;
    CHAR crc_hi;

    // Дополнительный байт
    CHAR add_byte;
} CMD_TO_TMS_STRUCT;

typedef struct
{
    CHAR Address;           // Адрес контроллера
    CHAR Number;            // Номер команды
} CMD_TMS_HEAD_TEST_ALL_STRUCT;

typedef struct
{
    CHAR analog1_lo;    // младший байт заданной скорости
    CHAR analog1_hi;    // старший байт заданной скорости
    CHAR analog2_lo;    // младший байт заданной скорости
    CHAR analog2_hi;    // старший байт заданной скорости
    CHAR analog3_lo;    // младший байт заданной скорости
    CHAR analog3_hi;    // старший байт заданной скорости
    CHAR analog4_lo;    // младший байт заданной скорости
    CHAR analog4_hi;    // старший байт заданной скорости
    CHAR analog5_lo;    // младший байт заданной скорости
    CHAR analog5_hi;    // старший байт заданной скорости

} CMD_ANALOG_DATA_TEST_ALL_STRUCT;

typedef struct
{
    CMD_DIGIT_BYTE_STRUCT byte01;
    CMD_DIGIT_BYTE_STRUCT byte02;

    CMD_DIGIT_BYTE_STRUCT byte03;
    CMD_DIGIT_BYTE_STRUCT byte04;

    CMD_DIGIT_BYTE_STRUCT byte05;
    CMD_DIGIT_BYTE_STRUCT byte06;

    CMD_DIGIT_BYTE_STRUCT byte07;
    CMD_DIGIT_BYTE_STRUCT byte08;

    CMD_DIGIT_BYTE_STRUCT byte09;
    CMD_DIGIT_BYTE_STRUCT byte10;

    CMD_DIGIT_BYTE_STRUCT byte11;
    CMD_DIGIT_BYTE_STRUCT byte12;
} CMD_DIGIT_DATA_TEST_ALL_STRUCT;

typedef struct
{
    // Заголовок
    CMD_TMS_HEAD_TEST_ALL_STRUCT head;

    // Аналоговые величины
    CMD_ANALOG_DATA_TEST_ALL_STRUCT analog_data;

    // Цифровые значениy
    CMD_DIGIT_DATA_TEST_ALL_STRUCT digit_data;

    // Контрольнаy сумма
    CHAR crc_lo;
    CHAR crc_hi;

    // Дополнительный байт
    CHAR add_byte;
} CMD_TO_TMS_TEST_ALL_STRUCT;


typedef struct
{
    CMD_DIGIT_BYTE_STRUCT byte01;
    CMD_DIGIT_BYTE_STRUCT byte02;
    CMD_DIGIT_BYTE_STRUCT byte03;
    CMD_DIGIT_BYTE_STRUCT byte04;
    CMD_DIGIT_BYTE_STRUCT byte05;
    CMD_DIGIT_BYTE_STRUCT byte06;
    CMD_DIGIT_BYTE_STRUCT byte07;
    CMD_DIGIT_BYTE_STRUCT byte08;
    CMD_DIGIT_BYTE_STRUCT byte09;
    CMD_DIGIT_BYTE_STRUCT byte10;
    CMD_DIGIT_BYTE_STRUCT byte11;
    CMD_DIGIT_BYTE_STRUCT byte12;

    CMD_DIGIT_BYTE_STRUCT byte13;
    CMD_DIGIT_BYTE_STRUCT byte14;
    CMD_DIGIT_BYTE_STRUCT byte15;
    CMD_DIGIT_BYTE_STRUCT byte16;
    CMD_DIGIT_BYTE_STRUCT byte17;
    CMD_DIGIT_BYTE_STRUCT byte18;
    CMD_DIGIT_BYTE_STRUCT byte19;
    CMD_DIGIT_BYTE_STRUCT byte20;
    CMD_DIGIT_BYTE_STRUCT byte21;
    CMD_DIGIT_BYTE_STRUCT byte22;
    CMD_DIGIT_BYTE_STRUCT byte23;
    CMD_DIGIT_BYTE_STRUCT byte24;
    CMD_DIGIT_BYTE_STRUCT byte25;
    CMD_DIGIT_BYTE_STRUCT byte26;
    CMD_DIGIT_BYTE_STRUCT byte27;
    CMD_DIGIT_BYTE_STRUCT byte28;

    CMD_DIGIT_BYTE_STRUCT byte29;
    CMD_DIGIT_BYTE_STRUCT byte30;
    CMD_DIGIT_BYTE_STRUCT byte31;
    CMD_DIGIT_BYTE_STRUCT byte32;
    CMD_DIGIT_BYTE_STRUCT byte33;
    CMD_DIGIT_BYTE_STRUCT byte34;
    CMD_DIGIT_BYTE_STRUCT byte35;
    CMD_DIGIT_BYTE_STRUCT byte36;
    CMD_DIGIT_BYTE_STRUCT byte37;
    CMD_DIGIT_BYTE_STRUCT byte38;
    CMD_DIGIT_BYTE_STRUCT byte39;
    CMD_DIGIT_BYTE_STRUCT byte40;
    CMD_DIGIT_BYTE_STRUCT byte41;
    CMD_DIGIT_BYTE_STRUCT byte42;
    CMD_DIGIT_BYTE_STRUCT byte43;
    CMD_DIGIT_BYTE_STRUCT byte44;

    CMD_DIGIT_BYTE_STRUCT byte45;
    CMD_DIGIT_BYTE_STRUCT byte46;
    CMD_DIGIT_BYTE_STRUCT byte47;
    CMD_DIGIT_BYTE_STRUCT byte48;
    CMD_DIGIT_BYTE_STRUCT byte49;
    CMD_DIGIT_BYTE_STRUCT byte50;

    CMD_DIGIT_BYTE_STRUCT byte51;
    CMD_DIGIT_BYTE_STRUCT byte52;

    CMD_DIGIT_BYTE_STRUCT byte53;
    CMD_DIGIT_BYTE_STRUCT byte54;

    CMD_DIGIT_BYTE_STRUCT byte55;
    CMD_DIGIT_BYTE_STRUCT byte56;

    CMD_DIGIT_BYTE_STRUCT byte57;
    CMD_DIGIT_BYTE_STRUCT byte58;
    CMD_DIGIT_BYTE_STRUCT byte59;
    CMD_DIGIT_BYTE_STRUCT byte60;

} ANS_DIGIT_DATA_TO_TERMINAL_STRUCT;            // Дискретные величины посылки от СУ

typedef struct
{
    CHAR analog1_lo;
    CHAR analog1_hi;
    CHAR analog2_lo;
    CHAR analog2_hi;
    CHAR analog3_lo;
    CHAR analog3_hi;
    CHAR analog4_lo;
    CHAR analog4_hi;
    CHAR analog5_lo;
    CHAR analog5_hi;
    CHAR analog6_lo;
    CHAR analog6_hi;
    CHAR analog7_lo;
    CHAR analog7_hi;
    CHAR analog8_lo;
    CHAR analog8_hi;
    CHAR analog9_lo;
    CHAR analog9_hi;

    CHAR analog10_lo;
    CHAR analog10_hi;
    CHAR analog11_lo;
    CHAR analog11_hi;
    CHAR analog12_lo;
    CHAR analog12_hi;
    CHAR analog13_lo;
    CHAR analog13_hi;
    CHAR analog14_lo;
    CHAR analog14_hi;
    CHAR analog15_lo;
    CHAR analog15_hi;
    CHAR analog16_lo;
    CHAR analog16_hi;
    CHAR analog17_lo;
    CHAR analog17_hi;
    CHAR analog18_lo;
    CHAR analog18_hi;
    CHAR analog19_lo;
    CHAR analog19_hi;

    CHAR analog20_lo;
    CHAR analog20_hi;
    CHAR analog21_lo;
    CHAR analog21_hi;
    CHAR analog22_lo;
    CHAR analog22_hi;
    CHAR analog23_lo;
    CHAR analog23_hi;
    CHAR analog24_lo;
    CHAR analog24_hi;


    CHAR analog25_lo;
    CHAR analog25_hi;
    CHAR analog26_lo;
    CHAR analog26_hi;
    CHAR analog27_lo;
    CHAR analog27_hi;
    CHAR analog28_lo;
    CHAR analog28_hi;
    CHAR analog29_lo;
    CHAR analog29_hi;
    CHAR analog30_lo;
    CHAR analog30_hi;

    CHAR analog31_lo;
    CHAR analog31_hi;
    CHAR analog32_lo;
    CHAR analog32_hi;
    CHAR analog33_lo;
    CHAR analog33_hi;
    CHAR analog34_lo;
    CHAR analog34_hi;
    CHAR analog35_lo;
    CHAR analog35_hi;
    CHAR analog36_lo;
    CHAR analog36_hi;
    CHAR analog37_lo;
    CHAR analog37_hi;
    CHAR analog38_lo;
    CHAR analog38_hi;
    CHAR analog39_lo;
    CHAR analog39_hi;
    CHAR analog40_lo;
    CHAR analog40_hi;

    CHAR analog41_lo;
    CHAR analog41_hi;
    CHAR analog42_lo;
    CHAR analog42_hi;
    CHAR analog43_lo;
    CHAR analog43_hi;
    CHAR analog44_lo;
    CHAR analog44_hi;
    CHAR analog45_lo;
    CHAR analog45_hi;
    CHAR analog46_lo;
    CHAR analog46_hi;
    CHAR analog47_lo;
    CHAR analog47_hi;
    CHAR analog48_lo;
    CHAR analog48_hi;
    CHAR analog49_lo;
    CHAR analog49_hi;
    CHAR analog50_lo;
    CHAR analog50_hi;

    CHAR analog51_lo;
    CHAR analog51_hi;
    CHAR analog52_lo;
    CHAR analog52_hi;
    CHAR analog53_lo;
    CHAR analog53_hi;
    CHAR analog54_lo;
    CHAR analog54_hi;
    CHAR analog55_lo;
    CHAR analog55_hi;
    CHAR analog56_lo;
    CHAR analog56_hi;
    CHAR analog57_lo;
    CHAR analog57_hi;
    CHAR analog58_lo;
    CHAR analog58_hi;
    CHAR analog59_lo;
    CHAR analog59_hi;
    CHAR analog60_lo;
    CHAR analog60_hi;

    CHAR analog61_lo;
    CHAR analog61_hi;
    CHAR analog62_lo;
    CHAR analog62_hi;
    CHAR analog63_lo;
    CHAR analog63_hi;
    CHAR analog64_lo;
    CHAR analog64_hi;
    CHAR analog65_lo;
    CHAR analog65_hi;
    CHAR analog66_lo;
    CHAR analog66_hi;
    CHAR analog67_lo;
    CHAR analog67_hi;
    CHAR analog68_lo;
    CHAR analog68_hi;

    CHAR analog69_lo;
    CHAR analog69_hi;
    CHAR analog70_lo;
    CHAR analog70_hi;
    CHAR analog71_lo;
    CHAR analog71_hi;
    CHAR analog72_lo;
    CHAR analog72_hi;
    CHAR analog73_lo;
    CHAR analog73_hi;
    CHAR analog74_lo;
    CHAR analog74_hi;
    CHAR analog75_lo;
    CHAR analog75_hi;
    CHAR analog76_lo;
    CHAR analog76_hi;
    CHAR analog77_lo;
    CHAR analog77_hi;
    CHAR analog78_lo;
    CHAR analog78_hi;
    CHAR analog79_lo;
    CHAR analog79_hi;
    CHAR analog80_lo;
    CHAR analog80_hi;

    CHAR analog81_lo;
    CHAR analog81_hi;
    CHAR analog82_lo;
    CHAR analog82_hi;
    CHAR analog83_lo;
    CHAR analog83_hi;
    CHAR analog84_lo;
    CHAR analog84_hi;

    CHAR analog85_lo;
    CHAR analog85_hi;
    CHAR analog86_lo;
    CHAR analog86_hi;
    CHAR analog87_lo;
    CHAR analog87_hi;
    CHAR analog88_lo;
    CHAR analog88_hi;
    CHAR analog89_lo;
    CHAR analog89_hi;

    CHAR analog90_lo;
    CHAR analog90_hi;
    CHAR analog91_lo;
    CHAR analog91_hi;
    CHAR analog92_lo;
    CHAR analog92_hi;
    CHAR analog93_lo;
    CHAR analog93_hi;
    CHAR analog94_lo;
    CHAR analog94_hi;

    CHAR analog95_lo;
    CHAR analog95_hi;
    CHAR analog96_lo;
    CHAR analog96_hi;


} TMS_ANALOG_DATA_STRUCT;

typedef struct
{
    // Заголовок
    CMD_TMS_HEAD_STRUCT head;

    // Цифровые значениy
    ANS_DIGIT_DATA_TO_TERMINAL_STRUCT digit_data;

    // Аналоговые величины
    TMS_ANALOG_DATA_STRUCT analog_data;

    // Контрольнаy сумма
    CHAR crc_lo;
    CHAR crc_hi;

    // Дополнительный байт
    CHAR add_byte;

} TMS_TO_TERMINAL_STRUCT;

#define TMS_TO_TERMINAL_STRUCT_DEFAULT {{0}, {0}, {0}, 0, 0, 0}

typedef struct
{
    CMD_DIGIT_BYTE_STRUCT byte01;
    CMD_DIGIT_BYTE_STRUCT byte02;
    CMD_DIGIT_BYTE_STRUCT byte03;
    CMD_DIGIT_BYTE_STRUCT byte04;
    CMD_DIGIT_BYTE_STRUCT byte05;
    CMD_DIGIT_BYTE_STRUCT byte06;
    CMD_DIGIT_BYTE_STRUCT byte07;
    CMD_DIGIT_BYTE_STRUCT byte08;
    CMD_DIGIT_BYTE_STRUCT byte09;
    CMD_DIGIT_BYTE_STRUCT byte10;
    CMD_DIGIT_BYTE_STRUCT byte11;
    CMD_DIGIT_BYTE_STRUCT byte12;

    CMD_DIGIT_BYTE_STRUCT byte13;
    CMD_DIGIT_BYTE_STRUCT byte14;
    CMD_DIGIT_BYTE_STRUCT byte15;
    CMD_DIGIT_BYTE_STRUCT byte16;
    CMD_DIGIT_BYTE_STRUCT byte17;
    CMD_DIGIT_BYTE_STRUCT byte18;
    CMD_DIGIT_BYTE_STRUCT byte19;
    CMD_DIGIT_BYTE_STRUCT byte20;
    CMD_DIGIT_BYTE_STRUCT byte21;
    CMD_DIGIT_BYTE_STRUCT byte22;
    CMD_DIGIT_BYTE_STRUCT byte23;
    CMD_DIGIT_BYTE_STRUCT byte24;

    CMD_DIGIT_BYTE_STRUCT byte25;
    CMD_DIGIT_BYTE_STRUCT byte26;
    CMD_DIGIT_BYTE_STRUCT byte27;
    CMD_DIGIT_BYTE_STRUCT byte28;
    CMD_DIGIT_BYTE_STRUCT byte29;
    CMD_DIGIT_BYTE_STRUCT byte30;
    CMD_DIGIT_BYTE_STRUCT byte31;
    CMD_DIGIT_BYTE_STRUCT byte32;
    CMD_DIGIT_BYTE_STRUCT byte33;
    CMD_DIGIT_BYTE_STRUCT byte34;

} ANS_DIGIT_DATA_TO_TERMINAL_TEST_ALL_STRUCT;

typedef struct
{
    CHAR analog1_lo;
    CHAR analog1_hi;
    CHAR analog2_lo;
    CHAR analog2_hi;
    CHAR analog3_lo;
    CHAR analog3_hi;
    CHAR analog4_lo;
    CHAR analog4_hi;
    CHAR analog5_lo;
    CHAR analog5_hi;
    CHAR analog6_lo;
    CHAR analog6_hi;
    CHAR analog7_lo;
    CHAR analog7_hi;
    CHAR analog8_lo;
    CHAR analog8_hi;
    CHAR analog9_lo;
    CHAR analog9_hi;

    CHAR analog10_lo;
    CHAR analog10_hi;
    CHAR analog11_lo;
    CHAR analog11_hi;
    CHAR analog12_lo;
    CHAR analog12_hi;
    CHAR analog13_lo;
    CHAR analog13_hi;
    CHAR analog14_lo;
    CHAR analog14_hi;
    CHAR analog15_lo;
    CHAR analog15_hi;
    CHAR analog16_lo;
    CHAR analog16_hi;
    CHAR analog17_lo;
    CHAR analog17_hi;
    CHAR analog18_lo;
    CHAR analog18_hi;
    CHAR analog19_lo;
    CHAR analog19_hi;

    CHAR analog20_lo;
    CHAR analog20_hi;
    CHAR analog21_lo;
    CHAR analog21_hi;
    CHAR analog22_lo;
    CHAR analog22_hi;
    CHAR analog23_lo;
    CHAR analog23_hi;
    CHAR analog24_lo;
    CHAR analog24_hi;

} TMS_ANALOG_DATA_TEST_ALL_STRUCT;

typedef struct
{
    // Заголовок
    CMD_TMS_HEAD_TEST_ALL_STRUCT head;

    // Цифровые значениy
    ANS_DIGIT_DATA_TO_TERMINAL_TEST_ALL_STRUCT digit_data;

    // Аналоговые величины
    TMS_ANALOG_DATA_TEST_ALL_STRUCT analog_data;

    // Контрольнаy сумма
    CHAR crc_lo;
    CHAR crc_hi;

    // Дополнительный байт
    CHAR add_byte;

    //Указатель на массив данных из TMS
//  unsigned int pcommand;

    //Функциу формированиу ответа
//  void (*fill_answer)();

} TMS_TO_TERMINAL_TEST_ALL_STRUCT;

void ReceiveCommandTestAll(RS_DATA_STRUCT *RS232_Arr);
void ReceiveCommand(RS_DATA_STRUCT *RS232_Arr);


extern TMS_TO_TERMINAL_TEST_ALL_STRUCT  reply_test_all;
extern TMS_TO_TERMINAL_STRUCT reply;




#endif /* SRC_XILINX_NIO12_RS_FUNCTION_TERMINAL_H_ */