Добавлено состояние для всех приборов.
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user