add menuconfig for user to set mac address of wifi, bt and ethernet.
help
Select this option to enable Bluetooth stack and show the submenu with Bluetooth configuration choices.
+config ESP_MAC_OFFSET_BT_
+ int "MAC address offset value of WiFi station"
+ depends on BT_ENABLED
+ range 0 255
+ default 2
+ help
+ The offset value of bluetooth MAC address from the MAC address which is read from efuse.
+ This offset value must be different from that of WiFi softap, WiFi station and ethernet.
+
config BTC_TASK_STACK_SIZE
int "Bluetooth event (callback to application) task stack size"
depends on BT_ENABLED
help
Select this option to enable WiFi stack and show the submenu with WiFi configuration choices.
+config ESP_MAC_OFFSET_WIFI_STA
+ int "MAC address offset value of WiFi station"
+ depends on WIFI_ENABLED
+ range 0 255
+ default 0
+ help
+ The offset value of WiFi station MAC address from the MAC address which is read from efuse.
+ This offset value must be different from that of WiFi softap, bluetooth and ethernet.
+
+config ESP_MAC_OFFSET_WIFI_SOFTAP
+ int "MAC address offset value of WiFi softap"
+ depends on WIFI_ENABLED
+ range 0 255
+ default 1
+ help
+ The offset value of WiFi softap MAC address from the MAC address which is read from efuse.
+ This offset value must be different from that of WiFi station, bluetooth and ethernet.
+
config SW_COEXIST_ENABLE
bool "Software controls WiFi/Bluetooth coexistence"
depends on WIFI_ENABLED && BT_ENABLED
extern "C" {
#endif
+enum {
+ ESP_MAC_WIFI_STA,
+ ESP_MAC_WIFI_SOFTAP,
+ ESP_MAC_BT,
+ ESP_MAC_ETH,
+};
+
/**
* @attention application don't need to call this function anymore. It do nothing and will
* be removed in future version.
*/
esp_err_t system_efuse_read_mac(uint8_t mac[6]) __attribute__ ((deprecated));
+/**
+ * @brief Read hardware MAC address and set MAC address of the interface.
+ *
+ * This function first reads hardware MAC address from efuse. Then set the MAC address of the interface
+ * including wifi station, wifi softap, bluetooth and ethernet according to the offset value in menuconfig.
+ *
+ * @param mac MAC address of the interface, length: 6 bytes.
+ * @param interface interface, 0:wifi station, 1:wifi softap, 2:bluetooth, 3:ethernet.
+ *
+ * @return ESP_OK on success
+ */
+esp_err_t esp_read_mac(uint8_t* mac, int interface);
+
/**
* Get SDK version
*
-Subproject commit 7b06303c0fa416aea7f86b7596e84db367189066
+Subproject commit e22ec1a5140dca2bb44f9bfb3147911fa4ebb8fe
// See the License for the specific language governing permissions and
// limitations under the License.
+#include <string.h>
+
#include "esp_system.h"
#include "esp_attr.h"
#include "esp_wifi.h"
esp_err_t system_efuse_read_mac(uint8_t mac[6]) __attribute__((alias("esp_efuse_read_mac")));
+esp_err_t esp_read_mac(uint8_t* mac, int interface)
+{
+ uint8_t efuse_mac[6];
+
+ if (mac == NULL) {
+ ESP_LOGE(TAG, "mac address param is NULL");
+ abort();
+ }
+
+ esp_efuse_read_mac(efuse_mac);
+
+ switch (interface) {
+#if CONFIG_WIFI_ENABLED
+ case ESP_MAC_WIFI_STA:
+ memcpy(mac, efuse_mac, 6);
+ mac[5] += CONFIG_ESP_MAC_OFFSET_WIFI_STA;
+ break;
+ case ESP_MAC_WIFI_SOFTAP:
+ memcpy(mac, efuse_mac, 6);
+ mac[5] += CONFIG_ESP_MAC_OFFSET_WIFI_SOFTAP;
+ break;
+#endif
+#if CONFIG_BT_ENABLED
+ case ESP_MAC_WIFI_BT:
+ memcpy(mac, efuse_mac, 6);
+ mac[5] += CONFIG_ESP_MAC_OFFSET_BT;
+ break;
+#endif
+#if CONFIG_ETHERNET
+ case ESP_MAC_WIFI_ETH:
+ memcpy(mac, efuse_mac, 6);
+ mac[5] += CONFIG_ESP_MAC_OFFSET_ETH;
+ break;
+#endif
+ default:
+ ESP_LOGW(TAG, "wrong mac type");
+ break;
+ }
+
+ return ESP_OK;
+}
void esp_restart_noos() __attribute__ ((noreturn));
help
Select this option to enable ethernet driver and show the submenu with ethernet features.
+config ESP_MAC_OFFSET_ETH
+ int "MAC address offset value of ethernet"
+ depends on ETHERNET
+ range 0 255
+ default 3
+ help
+ The offset value of ethernet MAC address from the MAC address which is read from efuse.
+ This offset value must be different from that of WiFi softap, bluetooth and WiFi station.
+
config DMA_RX_BUF_NUM
int "Number of DMA RX buffers"
range 3 20
static void emac_macaddr_init(void)
{
- esp_efuse_read_mac(&(emac_config.macaddr[0]));
- emac_config.macaddr[5] = emac_config.macaddr[5] + 3;
+ esp_read_mac(&(emac_config.macaddr[0]), ESP_MAC_ETH);
}
void esp_eth_get_mac(uint8_t mac[6])