доработка. изменение 51 команды

This commit is contained in:
2024-10-24 09:21:52 +03:00
parent 64a5de17f4
commit a712d75c76
3 changed files with 71 additions and 49 deletions

View File

@@ -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

View File

@@ -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)