Used with eeprom_flash to write network configuration to STM32F103 flash
Fork of my_eeprom_funcs by
my_eeprom_funcs.cpp@1:6bdc99dd8e0a, 2014-09-28 (annotated)
- 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?
User | Revision | Line number | New 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 | } |