diff --git a/Core/Inc/pribors.h b/Core/Inc/pribors.h index e73d616..3f17a42 100644 --- a/Core/Inc/pribors.h +++ b/Core/Inc/pribors.h @@ -38,7 +38,7 @@ #define IP_PRIBOR_PRDK3 "10.1.1.33" #define IP_PRIBOR_PRDK4 "10.1.1.43" #define IP_PRIBOR_UF "10.1.1.52" -#define IP_PRIBOR_DEFAULT "10.1.1.69" +#define IP_PRIBOR_DEFAULT "10.1.1.70" #define PORT_PRIBOR_PRDN1 11 #define PORT_PRIBOR_PRDN2 21 @@ -53,7 +53,7 @@ #define PORT_PRIBOR_PRDK3 33 #define PORT_PRIBOR_PRDK4 43 #define PORT_PRIBOR_UF 52 -#define PORT_PRIBOR_DEFAULT 69 +#define PORT_PRIBOR_DEFAULT 70 #define BASE_ADDR_UG 0x100 #define BASE_ADDR_UKP0 0x130 diff --git a/Core/Src/main.c b/Core/Src/main.c index 5698e78..c713cc1 100644 --- a/Core/Src/main.c +++ b/Core/Src/main.c @@ -550,43 +550,6 @@ void rcv_command(void) tx_msg.cmd_len = (ports_amount << 2) + 3; } break; - case 51: - //----------------------------------------------------------- - // КОМАНДА №51 - // ЧТЕНИЕ МАССИВА ИЗ FLASH - //----------------------------------------------------------- - - cmd_buf[0] = rx_msg.cmd_code; // - код команды - bytes_amount = rx_msg.rx_buf[9] + (rx_msg.rx_buf[10] << 8); - - // Проверка размера принятого буфера - if( rx_msg.length < (8)) - { - // Размер принятого пакета меньше чем долно быть - // Установить ошибку - // КОД = 2 - cmd_buf[1] = ERR_SIZE; - - // Установить размер буфера = 2 - tx_msg.cmd_len = 2; - - } - else - { - // Установить ВЫПОЛНЕНО - cmd_buf[1] = NO_ERROR; - // Колличество записаных байт - cmd_buf[2] = rx_msg.rx_buf[7]; - cmd_buf[3] = rx_msg.rx_buf[8] << 8; - cmd_buf[4] = rx_msg.rx_buf[9]; - cmd_buf[5] = rx_msg.rx_buf[10] << 8; - uint16_t flash_addr = rx_msg.rx_buf[7] + (rx_msg.rx_buf[8] << 8); - uint16_t numofwords = (bytes_amount/4)+((bytes_amount%4)!=0); - Flash_Read_Data(FLASH_BASE_WR + flash_addr, (uint32_t *)&cmd_buf[6], numofwords); - // Установить размер буфера - tx_msg.cmd_len = 6 + bytes_amount; - } - break; case 55: //----------------------------------------------------------- // КОМАНДА №55 @@ -623,6 +586,48 @@ void rcv_command(void) tx_msg.cmd_len = 2; } break; + case 56: + //----------------------------------------------------------- + // КОМАНДА №56 + // ЧТЕНИЕ МАССИВА ИЗ FLASH + //----------------------------------------------------------- + + cmd_buf[0] = rx_msg.cmd_code; // - код команды + // Проверка размера принятого буфера + if( rx_msg.length < (8)) + { + // Размер принятого пакета меньше чем долно быть + // Установить ошибку + // КОД = 2 + cmd_buf[1] = ERR_SIZE; + + // Установить размер буфера = 2 + tx_msg.cmd_len = 2; + + } + else + { + uint32_t sector = FLASH_BASE_WR; + unsigned char flash_sector = rx_msg.rx_buf[7]; + if (flash_sector == 1) sector = FLASH_BASE_EMS_B0; + if (flash_sector == 2) sector = FLASH_BASE_EMS_B1; + bytes_amount = rx_msg.rx_buf[10] + (rx_msg.rx_buf[11] << 8); + + // Установить ВЫПОЛНЕНО + cmd_buf[1] = NO_ERROR; + // Колличество записаных байт + cmd_buf[2] = rx_msg.rx_buf[7]; + cmd_buf[3] = rx_msg.rx_buf[8]; + cmd_buf[4] = rx_msg.rx_buf[9] << 8; + cmd_buf[5] = rx_msg.rx_buf[10]; + cmd_buf[6] = rx_msg.rx_buf[11] << 8; + uint16_t flash_addr = rx_msg.rx_buf[8] + (rx_msg.rx_buf[9] << 8); + uint16_t numofwords = (bytes_amount/4)+((bytes_amount%4)!=0); + Flash_Read_Data(sector + flash_addr, (uint32_t *)&cmd_buf[7], numofwords); + // Установить размер буфера + tx_msg.cmd_len = 7 + bytes_amount; + } + break; case 60: //----------------------------------------------------------- // КОМАНДА №60 diff --git a/Core/Src/pribors.c b/Core/Src/pribors.c index 3ba920e..a422eb3 100644 --- a/Core/Src/pribors.c +++ b/Core/Src/pribors.c @@ -91,7 +91,6 @@ uint16_t set_status(unsigned char *buf, uint32_t pribor) uint16_t set_status_prd(unsigned char *buf) { uint16_t ports_data, i; - buf[6] = 31; buf[7] = 0; ports_data = read_isa(BASE_ADDR_EMS_G); buf[8] = 0; @@ -105,23 +104,41 @@ uint16_t set_status_prd(unsigned char *buf) if( ports_data != 0xFFFF ) buf[8] = set_bit(buf[8], 2, 1); ports_data = read_isa(BASE_ADDR_UKP1); if( ports_data != 0xFFFF ) buf[8] = set_bit(buf[8], 3, 1); - for (i = 1; i <14; i++) + + for (uint16_t i = 1; i <14; i++) { write_isa( BASE_ADDR_EMS_G + 0xC, i ); ports_data = read_isa( BASE_ADDR_EMS_G + 0xE ); - buf[9+(i-1)*2] = ports_data & 0xFF; - buf[10+(i-1)*2] = ports_data >> 8; + buf[9 + (i - 1) * 2] = ports_data & 0xFF; + buf[10 + (i -1) * 2] = ports_data >> 8; } + ports_data = read_isa( BASE_ADDR_UG + 0xC ); - buf[31] = ports_data & 0xFF; - buf[32] = ports_data >> 8; + buf[35] = ports_data & 0xFF; + buf[36] = ports_data >> 8; ports_data = read_isa( BASE_ADDR_UG + 0xE ); - buf[33] = ports_data & 0xFF; - buf[34] = ports_data >> 8; + buf[37] = ports_data & 0xFF; + buf[38] = ports_data >> 8; + + ports_data = 0x55AA; + //BASE_ADDR_UKP0 + for (uint16_t i = 0; i <8; i++) + { + + buf[39 + i * 2] = ports_data & 0xFF; + buf[40 + i * 2] = ports_data >> 8; + } + + //BASE_ADDR_UKP1 + for (uint16_t i = 0; i <8; i++) + { + buf[55 + i * 2] = ports_data & 0xFF; + buf[56 + i * 2] = ports_data >> 8; + } pribor_type = PRIBOR_TYPE_PRD; - - return 33; + buf[6] = 63; + return buf[6] + 2; } uint16_t set_status_uf(unsigned char *buf)