Used with eeprom_flash to write network configuration to STM32F103 flash

Dependents:   F103-Web-Server

Fork of my_eeprom_funcs by Chau Vo

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() {