Used with eeprom_flash to write network configuration to STM32F103 flash

Dependents:   F103-Web-Server

Fork of my_eeprom_funcs by Chau Vo

Committer:
olympux
Date:
Sun Sep 28 17:35:07 2014 +0000
Revision:
1:6bdc99dd8e0a
Child:
2:57d40eaa1b1b
Rename .c into .cpp; Functions to load device network configuration, and tcp server info for auto transmit in TCP client mode

Who changed what in which revision?

UserRevisionLine numberNew contents of line
olympux 1:6bdc99dd8e0a 1 #include "mbed.h"
olympux 1:6bdc99dd8e0a 2 #include "my_eeprom_funcs.h"
olympux 1:6bdc99dd8e0a 3
olympux 1:6bdc99dd8e0a 4
olympux 1:6bdc99dd8e0a 5 /*
olympux 1:6bdc99dd8e0a 6 * EEPROM functions
olympux 1:6bdc99dd8e0a 7 */
olympux 1:6bdc99dd8e0a 8 void write_eeprom_network(char *buf) {
olympux 1:6bdc99dd8e0a 9 // Write network configuration
olympux 1:6bdc99dd8e0a 10 // 4-byte IP address + 4-byte subnet + 4-byte gateway + 3-byte MAC
olympux 1:6bdc99dd8e0a 11
olympux 1:6bdc99dd8e0a 12 printf("Saving network configuration for this device...\r\n");
olympux 1:6bdc99dd8e0a 13
olympux 1:6bdc99dd8e0a 14 // Unlock the Flash Program Erase controller */
olympux 1:6bdc99dd8e0a 15 FLASH_Unlock();
olympux 1:6bdc99dd8e0a 16 // EEPROM Init
olympux 1:6bdc99dd8e0a 17 EE_Init();
olympux 1:6bdc99dd8e0a 18 // IP address
olympux 1:6bdc99dd8e0a 19 EE_WriteVariable(VirtAddVarTab[IP_ADDRESS_POS+0], *buf++);
olympux 1:6bdc99dd8e0a 20 EE_WriteVariable(VirtAddVarTab[IP_ADDRESS_POS+1], *buf++);
olympux 1:6bdc99dd8e0a 21 EE_WriteVariable(VirtAddVarTab[IP_ADDRESS_POS+2], *buf++);
olympux 1:6bdc99dd8e0a 22 EE_WriteVariable(VirtAddVarTab[IP_ADDRESS_POS+3], *buf++);
olympux 1:6bdc99dd8e0a 23
olympux 1:6bdc99dd8e0a 24 // IP subnet
olympux 1:6bdc99dd8e0a 25 EE_WriteVariable(VirtAddVarTab[IP_SUBNET_POS+0], *buf++);
olympux 1:6bdc99dd8e0a 26 EE_WriteVariable(VirtAddVarTab[IP_SUBNET_POS+1], *buf++);
olympux 1:6bdc99dd8e0a 27 EE_WriteVariable(VirtAddVarTab[IP_SUBNET_POS+2], *buf++);
olympux 1:6bdc99dd8e0a 28 EE_WriteVariable(VirtAddVarTab[IP_SUBNET_POS+3], *buf++);
olympux 1:6bdc99dd8e0a 29
olympux 1:6bdc99dd8e0a 30 // IP gateway
olympux 1:6bdc99dd8e0a 31 EE_WriteVariable(VirtAddVarTab[IP_GATEWAY_POS+0], *buf++);
olympux 1:6bdc99dd8e0a 32 EE_WriteVariable(VirtAddVarTab[IP_GATEWAY_POS+1], *buf++);
olympux 1:6bdc99dd8e0a 33 EE_WriteVariable(VirtAddVarTab[IP_GATEWAY_POS+2], *buf++);
olympux 1:6bdc99dd8e0a 34 EE_WriteVariable(VirtAddVarTab[IP_GATEWAY_POS+3], *buf++);
olympux 1:6bdc99dd8e0a 35
olympux 1:6bdc99dd8e0a 36 //// TCP server port, not used
olympux 1:6bdc99dd8e0a 37 //EE_WriteVariable(VirtAddVarTab[TCP_SERVER_LOCAL_PORT_POS], *buf++);
olympux 1:6bdc99dd8e0a 38 //// UDP server port, not used
olympux 1:6bdc99dd8e0a 39 //EE_WriteVariable(VirtAddVarTab[UDP_SERVER_LOCAL_PORT_POS], *buf++);
olympux 1:6bdc99dd8e0a 40
olympux 1:6bdc99dd8e0a 41 // erase first_run flag
olympux 1:6bdc99dd8e0a 42 EE_WriteVariable(VirtAddVarTab[FIRST_RUN_FLAG_POS], 0xA5A5);
olympux 1:6bdc99dd8e0a 43
olympux 1:6bdc99dd8e0a 44 // MAC address
olympux 1:6bdc99dd8e0a 45 EE_WriteVariable(VirtAddVarTab[MAC_ADDRESS_POS+0], *buf++);
olympux 1:6bdc99dd8e0a 46 EE_WriteVariable(VirtAddVarTab[MAC_ADDRESS_POS+1], *buf++);
olympux 1:6bdc99dd8e0a 47 EE_WriteVariable(VirtAddVarTab[MAC_ADDRESS_POS+2], *buf++);
olympux 1:6bdc99dd8e0a 48 FLASH_Lock();
olympux 1:6bdc99dd8e0a 49
olympux 1:6bdc99dd8e0a 50 printf("Success\r\n");
olympux 1:6bdc99dd8e0a 51 }
olympux 1:6bdc99dd8e0a 52
olympux 1:6bdc99dd8e0a 53 void load_eeprom_network(void) {
olympux 1:6bdc99dd8e0a 54 mbed_mac_address((char *)u8mac);
olympux 1:6bdc99dd8e0a 55
olympux 1:6bdc99dd8e0a 56 printf("Loading network configuration...\r\n");
olympux 1:6bdc99dd8e0a 57
olympux 1:6bdc99dd8e0a 58 EE_Init();
olympux 1:6bdc99dd8e0a 59
olympux 1:6bdc99dd8e0a 60 // check if 1st run
olympux 1:6bdc99dd8e0a 61 EE_ReadVariable(VirtAddVarTab[FIRST_RUN_FLAG_POS], &first_run);
olympux 1:6bdc99dd8e0a 62 // if not first run, load network config
olympux 1:6bdc99dd8e0a 63 if (first_run == 0xA5A5) {
olympux 1:6bdc99dd8e0a 64 printf("User settings\r\n");
olympux 1:6bdc99dd8e0a 65
olympux 1:6bdc99dd8e0a 66 // IP address
olympux 1:6bdc99dd8e0a 67 EE_ReadVariable(VirtAddVarTab[IP_ADDRESS_POS+0], &u16ip_addr[0]);
olympux 1:6bdc99dd8e0a 68 EE_ReadVariable(VirtAddVarTab[IP_ADDRESS_POS+1], &u16ip_addr[1]);
olympux 1:6bdc99dd8e0a 69 EE_ReadVariable(VirtAddVarTab[IP_ADDRESS_POS+2], &u16ip_addr[2]);
olympux 1:6bdc99dd8e0a 70 EE_ReadVariable(VirtAddVarTab[IP_ADDRESS_POS+3], &u16ip_addr[3]);
olympux 1:6bdc99dd8e0a 71 u8ip_addr[0] = (uint8_t)(u16ip_addr[0] & 0x00FF);
olympux 1:6bdc99dd8e0a 72 u8ip_addr[1] = (uint8_t)(u16ip_addr[1] & 0x00FF);
olympux 1:6bdc99dd8e0a 73 u8ip_addr[2] = (uint8_t)(u16ip_addr[2] & 0x00FF);
olympux 1:6bdc99dd8e0a 74 u8ip_addr[3] = (uint8_t)(u16ip_addr[3] & 0x00FF);
olympux 1:6bdc99dd8e0a 75
olympux 1:6bdc99dd8e0a 76 // IP subnet
olympux 1:6bdc99dd8e0a 77 EE_ReadVariable(VirtAddVarTab[IP_SUBNET_POS+0], &u16ip_subnet[0]);
olympux 1:6bdc99dd8e0a 78 EE_ReadVariable(VirtAddVarTab[IP_SUBNET_POS+1], &u16ip_subnet[1]);
olympux 1:6bdc99dd8e0a 79 EE_ReadVariable(VirtAddVarTab[IP_SUBNET_POS+2], &u16ip_subnet[2]);
olympux 1:6bdc99dd8e0a 80 EE_ReadVariable(VirtAddVarTab[IP_SUBNET_POS+3], &u16ip_subnet[3]);
olympux 1:6bdc99dd8e0a 81
olympux 1:6bdc99dd8e0a 82 // IP gateway
olympux 1:6bdc99dd8e0a 83 EE_ReadVariable(VirtAddVarTab[IP_GATEWAY_POS+0], &u16ip_gateway[0]);
olympux 1:6bdc99dd8e0a 84 EE_ReadVariable(VirtAddVarTab[IP_GATEWAY_POS+1], &u16ip_gateway[1]);
olympux 1:6bdc99dd8e0a 85 EE_ReadVariable(VirtAddVarTab[IP_GATEWAY_POS+2], &u16ip_gateway[2]);
olympux 1:6bdc99dd8e0a 86 EE_ReadVariable(VirtAddVarTab[IP_GATEWAY_POS+3], &u16ip_gateway[3]);
olympux 1:6bdc99dd8e0a 87
olympux 1:6bdc99dd8e0a 88 //// TCP server port
olympux 1:6bdc99dd8e0a 89 //EE_ReadVariable(VirtAddVarTab[TCP_SERVER_LOCAL_PORT_POS], &tcp_server_port);
olympux 1:6bdc99dd8e0a 90 //// UDP server port
olympux 1:6bdc99dd8e0a 91 //EE_ReadVariable(VirtAddVarTab[UDP_SERVER_LOCAL_PORT_POS], &udp_server_port);
olympux 1:6bdc99dd8e0a 92
olympux 1:6bdc99dd8e0a 93 // First run flag, already read above
olympux 1:6bdc99dd8e0a 94
olympux 1:6bdc99dd8e0a 95 // MAC address
olympux 1:6bdc99dd8e0a 96 EE_ReadVariable(VirtAddVarTab[MAC_ADDRESS_POS+0], &u16mac_addr[0]);
olympux 1:6bdc99dd8e0a 97 EE_ReadVariable(VirtAddVarTab[MAC_ADDRESS_POS+1], &u16mac_addr[1]);
olympux 1:6bdc99dd8e0a 98 EE_ReadVariable(VirtAddVarTab[MAC_ADDRESS_POS+2], &u16mac_addr[2]);
olympux 1:6bdc99dd8e0a 99 u8mac[0] = DEFAULT_MAC0; u8mac[1] = DEFAULT_MAC1; u8mac[2] = DEFAULT_MAC2;
olympux 1:6bdc99dd8e0a 100 u8mac[3] = (uint8_t)(u16mac_addr[0] & 0x00FF);
olympux 1:6bdc99dd8e0a 101 u8mac[4] = (uint8_t)(u16mac_addr[1] & 0x00FF);
olympux 1:6bdc99dd8e0a 102 u8mac[5] = (uint8_t)(u16mac_addr[2] & 0x00FF);
olympux 1:6bdc99dd8e0a 103 //FLASH_Lock();
olympux 1:6bdc99dd8e0a 104
olympux 1:6bdc99dd8e0a 105 sprintf(str_ip_addr, "%d.%d.%d.%d", u8ip_addr[0], u8ip_addr[1], u8ip_addr[2], u8ip_addr[3]);
olympux 1:6bdc99dd8e0a 106 sprintf(str_ip_subnet, "%d.%d.%d.%d", (uint8_t)u16ip_subnet[0], (uint8_t)u16ip_subnet[1], (uint8_t)u16ip_subnet[2], (uint8_t)u16ip_subnet[3]);
olympux 1:6bdc99dd8e0a 107 sprintf(str_ip_gateway, "%d.%d.%d.%d", (uint8_t)u16ip_gateway[0], (uint8_t)u16ip_gateway[1], (uint8_t)u16ip_gateway[2], (uint8_t)u16ip_gateway[3]);
olympux 1:6bdc99dd8e0a 108 }
olympux 1:6bdc99dd8e0a 109 // if 1st run, use default addresses
olympux 1:6bdc99dd8e0a 110 else {
olympux 1:6bdc99dd8e0a 111 printf("No user settings, load defaults\r\n");
olympux 1:6bdc99dd8e0a 112 u8mac[0] = DEFAULT_MAC0; u8mac[1] = DEFAULT_MAC1; u8mac[2] = DEFAULT_MAC2;
olympux 1:6bdc99dd8e0a 113 u8mac[3] = DEFAULT_MAC3; u8mac[4] = DEFAULT_MAC4; u8mac[5] = DEFAULT_MAC5;
olympux 1:6bdc99dd8e0a 114 sprintf(str_ip_addr, DEFAULT_IP_ADDRESS);
olympux 1:6bdc99dd8e0a 115 sprintf(str_ip_subnet, DEFAULT_IP_SUBNET);
olympux 1:6bdc99dd8e0a 116 sprintf(str_ip_gateway, DEFAULT_IP_GATEWAY);
olympux 1:6bdc99dd8e0a 117 }
olympux 1:6bdc99dd8e0a 118
olympux 1:6bdc99dd8e0a 119 printf("Success\r\n");
olympux 1:6bdc99dd8e0a 120 printf("IP: %s\r\n", str_ip_addr);
olympux 1:6bdc99dd8e0a 121 printf("MASK: %s\r\n", str_ip_subnet);
olympux 1:6bdc99dd8e0a 122 printf("GW: %s\r\n", str_ip_gateway);
olympux 1:6bdc99dd8e0a 123 printf("TCP server: %d\r\n", tcp_server_local_port);
olympux 1:6bdc99dd8e0a 124 printf("UDP server: %d\r\n", udp_server_local_port);
olympux 1:6bdc99dd8e0a 125 }
olympux 1:6bdc99dd8e0a 126
olympux 1:6bdc99dd8e0a 127
olympux 1:6bdc99dd8e0a 128 /*
olympux 1:6bdc99dd8e0a 129 * TCP server info, only when this device in TCP client mode
olympux 1:6bdc99dd8e0a 130 * This device auto transmits data to TCP server
olympux 1:6bdc99dd8e0a 131 */
olympux 1:6bdc99dd8e0a 132 void write_eeprom_tcpserver(char* buf) {
olympux 1:6bdc99dd8e0a 133 // Write network configuration
olympux 1:6bdc99dd8e0a 134 // 4-byte IP address + 4-byte subnet + 4-byte gateway + 3-byte MAC
olympux 1:6bdc99dd8e0a 135
olympux 1:6bdc99dd8e0a 136 printf("Saving TCP server info\r\n");
olympux 1:6bdc99dd8e0a 137
olympux 1:6bdc99dd8e0a 138 // Unlock the Flash Program Erase controller
olympux 1:6bdc99dd8e0a 139 FLASH_Unlock();
olympux 1:6bdc99dd8e0a 140 // EEPROM Init
olympux 1:6bdc99dd8e0a 141 EE_Init();
olympux 1:6bdc99dd8e0a 142
olympux 1:6bdc99dd8e0a 143 // Auto transmit
olympux 1:6bdc99dd8e0a 144 EE_WriteVariable(VirtAddVarTab[AUTO_TRANSMIT_FLAG_POS], *buf++);
olympux 1:6bdc99dd8e0a 145 EE_WriteVariable(VirtAddVarTab[AUTO_TRANSMIT_TIME_PERIOD_POS], *buf++);
olympux 1:6bdc99dd8e0a 146 // IP address
olympux 1:6bdc99dd8e0a 147 EE_WriteVariable(VirtAddVarTab[TCP_SERVER_IP_ADDR_POS+0], *buf++);
olympux 1:6bdc99dd8e0a 148 EE_WriteVariable(VirtAddVarTab[TCP_SERVER_IP_ADDR_POS+1], *buf++);
olympux 1:6bdc99dd8e0a 149 EE_WriteVariable(VirtAddVarTab[TCP_SERVER_IP_ADDR_POS+2], *buf++);
olympux 1:6bdc99dd8e0a 150 EE_WriteVariable(VirtAddVarTab[TCP_SERVER_IP_ADDR_POS+3], *buf++);
olympux 1:6bdc99dd8e0a 151 // TCP server port
olympux 1:6bdc99dd8e0a 152 EE_WriteVariable(VirtAddVarTab[TCP_SERVER_PORT_POS], *buf);
olympux 1:6bdc99dd8e0a 153
olympux 1:6bdc99dd8e0a 154 FLASH_Lock();
olympux 1:6bdc99dd8e0a 155
olympux 1:6bdc99dd8e0a 156 printf("Success\r\n");
olympux 1:6bdc99dd8e0a 157 }
olympux 1:6bdc99dd8e0a 158
olympux 1:6bdc99dd8e0a 159 void load_eeprom_tcpserver(void) {
olympux 1:6bdc99dd8e0a 160 printf("Loading tcp server info...\r\n");
olympux 1:6bdc99dd8e0a 161
olympux 1:6bdc99dd8e0a 162 EE_Init();
olympux 1:6bdc99dd8e0a 163
olympux 1:6bdc99dd8e0a 164 // check if 1st run
olympux 1:6bdc99dd8e0a 165 EE_ReadVariable(VirtAddVarTab[AUTO_TRANSMIT_FLAG_POS], &auto_transmit_flag);
olympux 1:6bdc99dd8e0a 166 // if not auto transmit, exit
olympux 1:6bdc99dd8e0a 167 if (auto_transmit_flag == 0xA5A5) {
olympux 1:6bdc99dd8e0a 168 // Time period for transmitting to server
olympux 1:6bdc99dd8e0a 169 EE_ReadVariable(VirtAddVarTab[AUTO_TRANSMIT_TIME_PERIOD_POS], &transmit_time_period);
olympux 1:6bdc99dd8e0a 170 // IP address
olympux 1:6bdc99dd8e0a 171 EE_ReadVariable(VirtAddVarTab[TCP_SERVER_IP_ADDR_POS+0], &u16server_ip_addr[0]);
olympux 1:6bdc99dd8e0a 172 EE_ReadVariable(VirtAddVarTab[TCP_SERVER_IP_ADDR_POS+1], &u16server_ip_addr[1]);
olympux 1:6bdc99dd8e0a 173 EE_ReadVariable(VirtAddVarTab[TCP_SERVER_IP_ADDR_POS+2], &u16server_ip_addr[2]);
olympux 1:6bdc99dd8e0a 174 EE_ReadVariable(VirtAddVarTab[TCP_SERVER_IP_ADDR_POS+3], &u16server_ip_addr[3]);
olympux 1:6bdc99dd8e0a 175 u8server_ip_addr[0] = (uint8_t)(u16server_ip_addr[0] & 0x00FF);
olympux 1:6bdc99dd8e0a 176 u8server_ip_addr[1] = (uint8_t)(u16server_ip_addr[1] & 0x00FF);
olympux 1:6bdc99dd8e0a 177 u8server_ip_addr[2] = (uint8_t)(u16server_ip_addr[2] & 0x00FF);
olympux 1:6bdc99dd8e0a 178 u8server_ip_addr[3] = (uint8_t)(u16server_ip_addr[3] & 0x00FF);
olympux 1:6bdc99dd8e0a 179
olympux 1:6bdc99dd8e0a 180 // TCP server port
olympux 1:6bdc99dd8e0a 181 EE_ReadVariable(VirtAddVarTab[TCP_SERVER_PORT_POS], &u16tcp_server_port);
olympux 1:6bdc99dd8e0a 182
olympux 1:6bdc99dd8e0a 183 sprintf(str_server_ip_addr, "%d.%d.%d.%d", u8server_ip_addr[0], u8server_ip_addr[1], u8server_ip_addr[2], u8server_ip_addr[3]);
olympux 1:6bdc99dd8e0a 184 }
olympux 1:6bdc99dd8e0a 185 // if 1st run, use default addresses
olympux 1:6bdc99dd8e0a 186 else {
olympux 1:6bdc99dd8e0a 187 printf("No tcp server requirement\r\n");
olympux 1:6bdc99dd8e0a 188 }
olympux 1:6bdc99dd8e0a 189
olympux 1:6bdc99dd8e0a 190 printf("Done checking tcp server info.\r\n");
olympux 1:6bdc99dd8e0a 191 }