Used with eeprom_flash to write network configuration to STM32F103 flash
Fork of my_eeprom_funcs by
Diff: device_configuration.cpp
- Revision:
- 18:d88314ae7979
- Parent:
- 17:574f90b11417
- Child:
- 19:5671f3c25342
--- a/device_configuration.cpp Sat Aug 20 23:08:40 2016 +0000 +++ b/device_configuration.cpp Sun Aug 21 17:46:55 2016 +0000 @@ -30,19 +30,25 @@ uint16_t u16DeviceConfiguredFlag = 0; // flag indicates whether device has been configured (0xA5A5) or not // TCP server/UDP uint16_t u16LocalTcpServerPort = DEFAULT_LOCAL_TCP_SERVER_PORT; -uint16_t u16LocalUdpPort = DEFAULT_LOCAL_UDP_PORT; +uint16_t u16LocalUdpServerPort = DEFAULT_LOCAL_UDP_SERVER_PORT; // TCP client mode, set parameters of the remote TCP server this device connects to. // When enabled, this device will send its status to the server every transmit_time_period. uint16_t u16RemoteTcpServerIpAddr[4]; // 16-bit variable to be compatible with eeprom functions char strRemoteTcpServerIpAddr[16]; // RPC variable, converted from 16-bits u16server_ip_addr uint16_t u16RemoteTcpServerPort; // 16-bit variable to be compatible with eeprom functions uint16_t u16AutoTransmitFlag = 0, u16TransmitPeriod = DEFAULT_TRANSMIT_PERIOD; // auto transmit status, time period = 1s +// UDP client mode +uint16_t u16RemoteUdpServerIpAddr[4]; // 16-bit variable to be compatible with eeprom functions +char strRemoteUdpServerIpAddr[16]; // RPC variable, converted from 16-bits u16server_ip_addr +uint16_t u16RemoteUdpServerPort; // 16-bit variable to be compatible with eeprom functions // enable modes -uint16_t u16EnableTcpServer = 0, u16EnableTcpClient = 0, u16EnableUdp = DEFAULT_ENABLE_FLAG_VALUE; // flags for enabling TCP server/client and UDP (UDP is always on for configuration) +uint16_t u16EnableTcpServer = 0, u16EnableTcpClient = 0; // flags for enabling TCP server/client and UDP (UDP is always on for configuration) +uint16_t u16EnableUdpServer = DEFAULT_ENABLE_FLAG_VALUE, u16EnableUdpClient = 0; // extra uint8_t u8IpAddr[4]; // keep device ip address in 8-bits uint8_t u8MacAddr[6]; // keep mac in 8-bits uint8_t u8RemoteTcpServerIpAddr[4]; // remote TCP server ip address in 8-bits +uint8_t u8RemoteUdpServerIpAddr[4]; // remote UDP server ip address in 8-bits /*! * Function to write module network configuration @@ -54,10 +60,11 @@ * @note 16-bit TCP local port * @note 16-bit UDP local port */ -void write_device_configuration(uint16_t* ip, uint16_t* subnet, uint16_t* gateway, - uint16_t* mac, uint16_t tcp_port, uint16_t udp_port, - uint16_t* remote_ip, uint16_t remote_port, uint16_t auto_transmit, uint16_t transmit_period, - uint16_t enable_tcp_server, uint16_t enable_tcp_client, uint16_t enable_udp) { +void write_device_configuration(uint16_t* ip, uint16_t* subnet, uint16_t* gateway, uint16_t* mac, + uint16_t tcp_port, uint16_t udp_port, + uint16_t* remote_tcp_ip, uint16_t remote_tcp_port, uint16_t auto_transmit, uint16_t transmit_period, + uint16_t* remote_udp_ip, uint16_t remote_udp_port, + uint16_t enable_tcp_server, uint16_t enable_tcp_client, uint16_t enable_udp_server, uint16_t enable_udp_client) { // Write network configuration // 4-byte IP address + 4-byte subnet + 4-byte gateway + 3-byte MAC // + local TCP server port + local UDP port @@ -94,25 +101,35 @@ // Ports writeEEPROMHalfWord(LOCAL_TCP_SERVER_PORT_POS, tcp_port); - writeEEPROMHalfWord(LOCAL_UDP_PORT_POS, udp_port); + writeEEPROMHalfWord(LOCAL_UDP_SERVER_PORT_POS, udp_port); // Remote TCP server - writeEEPROMHalfWord(REMOTE_TCP_SERVER_IP_ADDR_POS+2*0, remote_ip[0]); - writeEEPROMHalfWord(REMOTE_TCP_SERVER_IP_ADDR_POS+2*1, remote_ip[1]); - writeEEPROMHalfWord(REMOTE_TCP_SERVER_IP_ADDR_POS+2*2, remote_ip[2]); - writeEEPROMHalfWord(REMOTE_TCP_SERVER_IP_ADDR_POS+2*3, remote_ip[3]); + writeEEPROMHalfWord(REMOTE_TCP_SERVER_IP_ADDR_POS+2*0, remote_tcp_ip[0]); + writeEEPROMHalfWord(REMOTE_TCP_SERVER_IP_ADDR_POS+2*1, remote_tcp_ip[1]); + writeEEPROMHalfWord(REMOTE_TCP_SERVER_IP_ADDR_POS+2*2, remote_tcp_ip[2]); + writeEEPROMHalfWord(REMOTE_TCP_SERVER_IP_ADDR_POS+2*3, remote_tcp_ip[3]); - // Remote port - writeEEPROMHalfWord(REMOTE_TCP_SERVER_PORT_POS, remote_port); + // Remote TCP server port + writeEEPROMHalfWord(REMOTE_TCP_SERVER_PORT_POS, remote_tcp_port); // Auto transmit writeEEPROMHalfWord(AUTO_TRANSMIT_FLAG_POS, auto_transmit); writeEEPROMHalfWord(AUTO_TRANSMIT_TIME_PERIOD_POS, transmit_period); + // Remote UDP server + writeEEPROMHalfWord(REMOTE_UDP_SERVER_IP_ADDR_POS+2*0, remote_udp_ip[0]); + writeEEPROMHalfWord(REMOTE_UDP_SERVER_IP_ADDR_POS+2*1, remote_udp_ip[1]); + writeEEPROMHalfWord(REMOTE_UDP_SERVER_IP_ADDR_POS+2*2, remote_udp_ip[2]); + writeEEPROMHalfWord(REMOTE_UDP_SERVER_IP_ADDR_POS+2*3, remote_udp_ip[3]); + + // Remote UDP server port + writeEEPROMHalfWord(REMOTE_UDP_SERVER_PORT_POS, remote_udp_port); + // Enable modes writeEEPROMHalfWord(ENABLE_TCP_SERVER_POS, enable_tcp_server); writeEEPROMHalfWord(ENABLE_TCP_CLIENT_POS, enable_tcp_client); - writeEEPROMHalfWord(ENABLE_UDP_MODE_POS, enable_udp); + writeEEPROMHalfWord(ENABLE_UDP_SERVER_POS, enable_udp_server); + writeEEPROMHalfWord(ENABLE_UDP_CLIENT_POS, enable_udp_client); disableEEPROMWriting(); @@ -167,7 +184,7 @@ // Ports u16LocalTcpServerPort = readEEPROMHalfWord(LOCAL_TCP_SERVER_PORT_POS); - u16LocalUdpPort = readEEPROMHalfWord(LOCAL_UDP_PORT_POS); + u16LocalUdpServerPort = readEEPROMHalfWord(LOCAL_UDP_SERVER_PORT_POS); // Remote TCP server u16RemoteTcpServerIpAddr[0] = readEEPROMHalfWord(REMOTE_TCP_SERVER_IP_ADDR_POS+2*0); @@ -179,22 +196,37 @@ u8RemoteTcpServerIpAddr[2] = (uint8_t)(u16RemoteTcpServerIpAddr[2] & 0x00FF); u8RemoteTcpServerIpAddr[3] = (uint8_t)(u16RemoteTcpServerIpAddr[3] & 0x00FF); - // Remote port + // Remote TCP server port u16RemoteTcpServerPort = readEEPROMHalfWord(REMOTE_TCP_SERVER_PORT_POS); // Auto transmit u16AutoTransmitFlag = readEEPROMHalfWord(AUTO_TRANSMIT_FLAG_POS); u16TransmitPeriod = readEEPROMHalfWord(AUTO_TRANSMIT_TIME_PERIOD_POS); + // Remote UDP server + u16RemoteUdpServerIpAddr[0] = readEEPROMHalfWord(REMOTE_UDP_SERVER_IP_ADDR_POS+2*0); + u16RemoteUdpServerIpAddr[1] = readEEPROMHalfWord(REMOTE_UDP_SERVER_IP_ADDR_POS+2*1); + u16RemoteUdpServerIpAddr[2] = readEEPROMHalfWord(REMOTE_UDP_SERVER_IP_ADDR_POS+2*2); + u16RemoteUdpServerIpAddr[3] = readEEPROMHalfWord(REMOTE_UDP_SERVER_IP_ADDR_POS+2*3); + u8RemoteUdpServerIpAddr[0] = (uint8_t)(u16RemoteUdpServerIpAddr[0] & 0x00FF); + u8RemoteUdpServerIpAddr[1] = (uint8_t)(u16RemoteUdpServerIpAddr[1] & 0x00FF); + u8RemoteUdpServerIpAddr[2] = (uint8_t)(u16RemoteUdpServerIpAddr[2] & 0x00FF); + u8RemoteUdpServerIpAddr[3] = (uint8_t)(u16RemoteUdpServerIpAddr[3] & 0x00FF); + + // Remote port + u16RemoteUdpServerPort = readEEPROMHalfWord(REMOTE_UDP_SERVER_PORT_POS); + // Enable modes u16EnableTcpServer = readEEPROMHalfWord(ENABLE_TCP_SERVER_POS); u16EnableTcpClient = readEEPROMHalfWord(ENABLE_TCP_CLIENT_POS); - u16EnableUdp = readEEPROMHalfWord(ENABLE_UDP_MODE_POS); + u16EnableUdpServer = readEEPROMHalfWord(ENABLE_UDP_SERVER_POS); + u16EnableUdpClient = readEEPROMHalfWord(ENABLE_UDP_CLIENT_POS); sprintf(strIpAddr, "%d.%d.%d.%d", u8IpAddr[0], u8IpAddr[1], u8IpAddr[2], u8IpAddr[3]); sprintf(strIpSubnet, "%d.%d.%d.%d", (uint8_t)u16IpSubnet[0], (uint8_t)u16IpSubnet[1], (uint8_t)u16IpSubnet[2], (uint8_t)u16IpSubnet[3]); sprintf(strIpGateway, "%d.%d.%d.%d", (uint8_t)u16IpGateway[0], (uint8_t)u16IpGateway[1], (uint8_t)u16IpGateway[2], (uint8_t)u16IpGateway[3]); sprintf(strRemoteTcpServerIpAddr, "%d.%d.%d.%d", u8RemoteTcpServerIpAddr[0], u8RemoteTcpServerIpAddr[1], u8RemoteTcpServerIpAddr[2], u8RemoteTcpServerIpAddr[3]); + sprintf(strRemoteUdpServerIpAddr, "%d.%d.%d.%d", u8RemoteUdpServerIpAddr[0], u8RemoteUdpServerIpAddr[1], u8RemoteUdpServerIpAddr[2], u8RemoteUdpServerIpAddr[3]); sprintf(strMacAddr, "%.2x:%.2x:%.2x:%.2x:%.2x:%.2x", u8MacAddr[0], u8MacAddr[1], u8MacAddr[2], u8MacAddr[3], u8MacAddr[4], u8MacAddr[5]); } // if ip is not configured, use default addresses @@ -206,6 +238,7 @@ sprintf(strIpSubnet, DEFAULT_IP_SUBNET); sprintf(strIpGateway, DEFAULT_IP_GATEWAY); sprintf(strRemoteTcpServerIpAddr, DEFAULT_REMOTE_TCP_SERVER_IP); + sprintf(strRemoteUdpServerIpAddr, DEFAULT_REMOTE_UDP_SERVER_IP); sprintf(strMacAddr, "%.2x:%.2x:%.2x:%.2x:%.2x:%.2x", u8MacAddr[0], u8MacAddr[1], u8MacAddr[2], u8MacAddr[3], u8MacAddr[4], u8MacAddr[5]); } @@ -214,16 +247,21 @@ INFO("MASK: %s", strIpSubnet); INFO("GW: %s", strIpGateway); INFO("TCP server local port: %d", u16LocalTcpServerPort); - INFO("UDP server local port: %d", u16LocalUdpPort); + INFO("UDP server local port: %d", u16LocalUdpServerPort); + + INFO("Remote TCP server: %s", strRemoteTcpServerIpAddr); + INFO("Remote TCP server port: %d", u16RemoteTcpServerPort); + + INFO("Remote UDP server: %s", strRemoteUdpServerIpAddr); + INFO("Remote UDP server port: %d", u16RemoteUdpServerPort); + + INFO("Auto transmit: %s", (u16AutoTransmitFlag == DEFAULT_ENABLE_FLAG_VALUE) ? "enabled" : "disable"); + INFO("Period: %d", u16TransmitPeriod); INFO("TCP server: %s", (u16EnableTcpServer == DEFAULT_ENABLE_FLAG_VALUE) ? "enabled" : "disable"); INFO("TCP client: %s", (u16EnableTcpClient == DEFAULT_ENABLE_FLAG_VALUE) ? "enabled" : "disable"); - INFO("UDP: %s", (u16EnableUdp == DEFAULT_ENABLE_FLAG_VALUE) ? "enabled" : "disable"); - - INFO("Remote TCP server: %s", strRemoteTcpServerIpAddr); - INFO("Remote TCP server port: %d", u16RemoteTcpServerPort); - INFO("Auto transmit: %s", (u16AutoTransmitFlag == DEFAULT_ENABLE_FLAG_VALUE) ? "enabled" : "disable"); - INFO("Period: %d", u16TransmitPeriod); + INFO("UDP server: %s", (u16EnableUdpServer == DEFAULT_ENABLE_FLAG_VALUE) ? "enabled" : "disable"); + INFO("UDP client: %s", (u16EnableUdpClient == DEFAULT_ENABLE_FLAG_VALUE) ? "enabled" : "disable"); } void reset_device_configuration() {