Добавлено состояние для всех приборов.

This commit is contained in:
MaD_CaT
2024-09-20 15:52:28 +03:00
parent 3f72134e13
commit 69f4ff7991
4 changed files with 17698 additions and 17355 deletions

View File

@@ -51,6 +51,7 @@ SRAM_HandleTypeDef hsram1;
/* USER CODE BEGIN PV */
uint32_t br_counter = 0;
uint32_t rx_counter = 0;
uint32_t pribor;
ip_addr_t rx_addr;
struct rcv_msg rx_msg;
struct tsm_msg tx_msg;
@@ -117,6 +118,7 @@ int main(void)
struct pbuf *p = pbuf_alloc(0, sizeof tx_msg.tx_buf, PBUF_RAM);
uint32_t br_addr = ipaddr_addr("10.1.1.255");
u16_t br_port = 50000U;
pribor = (((GPIOC->IDR) >> 6) & 0x7) | (((GPIOC->IDR) >> 9) & 0x18);
// timer start
if (HAL_TIM_Base_Start_IT(&htim3) != HAL_OK)
{
@@ -353,7 +355,7 @@ uint16_t create_header(void)
tx_msg.tx_buf[3] = rx_msg.rx_buf[3];
tx_msg.tx_buf[5] = 0;
tx_msg.tx_buf[6] = 0;
tx_msg.status_len = set_status(tx_msg.tx_buf) + 6;
tx_msg.status_len = set_status(tx_msg.tx_buf, pribor) + 6;
return tx_msg.status_len;
}

View File

@@ -7,6 +7,10 @@
#include "pribors.h"
#include "lwip/ip_addr.h"
_Bool flag_load_ems_g = 0;
_Bool flag_load_ems_b0 = 0;
_Bool flag_load_ems_b1 = 0;
_Bool flag_load_kems_b = 0;
uint32_t get_ip(void)
{
uint32_t pribor = (((GPIOC->IDR) >> 6) & 0x7) | (((GPIOC->IDR) >> 9) & 0x18);
@@ -51,13 +55,121 @@ uint16_t get_port(void)
}
}
uint16_t set_status(unsigned char *buf)
uint16_t set_status(unsigned char *buf, uint32_t pribor)
{
buf[6] = 2;
buf[7] = 0;
uint16_t status_len = 0;
switch(pribor)
{
case PRIBOR_UF: return set_status_uf(buf);
case PRIBOR_PRDN1: return set_status_prd(buf);
case PRIBOR_PRDN2: return set_status_prd(buf);
case PRIBOR_PRDN3: return set_status_prd(buf);
case PRIBOR_PRDN4: return set_status_prd(buf);
case PRIBOR_PRDV1: return set_status_prd(buf);
case PRIBOR_PRDV2: return set_status_prd(buf);
case PRIBOR_PRDV3: return set_status_prd(buf);
case PRIBOR_PRDV4: return set_status_prd(buf);
case PRIBOR_PRDK1: return set_status_prd(buf);
case PRIBOR_PRDK2: return set_status_prd(buf);
case PRIBOR_PRDK3: return set_status_prd(buf);
case PRIBOR_PRDK4: return set_status_prd(buf);
default:
{
buf[6] = 2;
buf[7] = 0;
buf[8] = 1;
buf[9] = 2;
status_len = 4;
}
}
buf[8] = 1;
buf[9] = 2;
return(4);
return(status_len);
}
uint16_t set_status_prd(unsigned char *buf)
{
uint16_t ports_data, i;
buf[6] = 27;
buf[7] = 0;
ports_data = read_isa(BASE_ADDR_EMS_G);
buf[8] = 0;
if( ports_data != 0xFFFF )
{
buf[8] = set_bit(buf[8], 0, 1);
buf[8] = set_bit(buf[8], 4, flag_load_ems_g);
}
else flag_load_ems_g = 0;
ports_data = read_isa(BASE_ADDR_UG);
if( ports_data != 0xFFFF ) buf[8] = set_bit(buf[8], 1, 1);
ports_data = read_isa(BASE_ADDR_UKP0);
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 <12; 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;
}
ports_data = read_isa( BASE_ADDR_UG + 0xC );
buf[31] = ports_data & 0xFF;
buf[32] = ports_data >> 8;
ports_data = read_isa( BASE_ADDR_UG + 0xE );
buf[33] = ports_data & 0xFF;
buf[34] = ports_data >> 8;
return 29;
}
uint16_t set_status_uf(unsigned char *buf)
{
uint16_t ports_data, i;
buf[6] = 67;
buf[7] = 0;
buf[8] = 0;
ports_data = read_isa(BASE_ADDR_KEMS_B);
if( ports_data != 0xFFFF )
{
buf[8] = set_bit(buf[8], 0, 1);
buf[8] = set_bit(buf[8], 3, flag_load_kems_b);
}
else flag_load_kems_b = 0;
ports_data = read_isa(BASE_ADDR_EMS_B0);
if( ports_data != 0xFFFF )
{
buf[8] = set_bit(buf[8], 1, 1);
buf[8] = set_bit(buf[8], 4, flag_load_ems_b0);
}
else flag_load_ems_b0 = 0;
ports_data = read_isa(BASE_ADDR_EMS_B1);
if( ports_data != 0xFFFF )
{
buf[8] = set_bit(buf[8], 2, 1);
buf[8] = set_bit(buf[8], 5, flag_load_ems_b1);
}
else flag_load_ems_b1 = 0;
for (i = 1; i <12; i++)
{
write_isa( BASE_ADDR_KEMS_B + 0xC, i );
ports_data = read_isa( BASE_ADDR_KEMS_B + 0xE );
buf[9+(i-1)*2] = ports_data & 0xFF;
buf[10+(i-1)*2] = ports_data >> 8;
write_isa( BASE_ADDR_EMS_B0 + 0xC, i );
ports_data = read_isa( BASE_ADDR_EMS_B0 + 0xE );
buf[9+(i-1)*2 + 22] = ports_data & 0xFF;
buf[10+(i-1)*2 + 22] = ports_data >> 8;
write_isa( BASE_ADDR_EMS_B1 + 0xC, i );
ports_data = read_isa( BASE_ADDR_EMS_B1 + 0xE );
buf[9+(i-1)*2 + 44] = ports_data & 0xFF;
buf[10+(i-1)*2 + 44] = ports_data >> 8;
}
return 69;
}
unsigned char set_bit(unsigned char bits, unsigned char index, _Bool val)
{
unsigned char new_val;
if (val == 1) new_val = bits | (1 << index);
else new_val = bits & ~(1 << index);
return new_val;
}