浏览代码

update: 修正mac地址的逻辑改到wlan_air101.c里, 逻辑没变, 修正了蓝牙地址的判断逻辑

Wendal Chen 1 年之前
父节点
当前提交
f440686991
共有 2 个文件被更改,包括 119 次插入115 次删除
  1. 0 115
      app/main.c
  2. 119 0
      app/network/luat_wlan_air101.c

+ 0 - 115
app/main.c

@@ -264,118 +264,3 @@ void UserMain(void){
 // void vApplicationTickHook( void ) {}
 void bpool(void *buffer, long len) {}
 #endif
-
-extern const u8 default_mac[];
-
-static int is_mac_ok(u8 mac_addr[6]) {
-
-	// 如果是默认值, 那就是不合法
-	if (!memcmp(mac_addr, default_mac, 6)) {
-        return 0;
-    }
-	// 如果任意一位是0x00或者0xFF,那就是不合法
-    for (size_t i = 0; i < 6; i++)
-    {
-        if (mac_addr[i] == 0 || mac_addr[i] == 0xFF) {
-            return 0;
-        }
-    }
-	return 1;
-}
-
-void sys_mac_init() {
-#ifdef LUAT_CONF_LOG_UART1
-	luat_log_set_uart_port(1);
-#endif
-	u8 tmp_mac[6] = {0};
-    u8 mac_addr[6] = {0};
-	u8 ap_mac[6] = {0};
-    unsigned  char unique_id [20] = {0};
-    tls_fls_read_unique_id(unique_id);
-	int ret = 0;
-
-#ifdef LUAT_USE_NIMBLE
-	// 读蓝牙mac, 如果是默认值,就根据unique_id读取
-	uint8_t bt_mac[6];
-	// 缺省mac C0:25:08:09:01:10
-	uint8_t bt_default_mac[] = {0xC0,0x25,0x08,0x09,0x01,0x10};
-	tls_get_bt_mac_addr(bt_mac);
-	if (!memcmp(bt_mac, bt_default_mac, 6)) { // 看来是默认MAC, 那就改一下吧
-		if (unique_id[1] == 0x10){
-			memcpy(bt_mac, unique_id + 10, 6);
-		}
-		else {
-			memcpy(bt_mac, unique_id + 2, 6);
-		}
-		tls_set_bt_mac_addr(bt_mac);
-	}
-	LLOGD("BLE_4.2 %02X:%02X:%02X:%02X:%02X:%02X", bt_mac[0], bt_mac[1], bt_mac[2], bt_mac[3], bt_mac[4], bt_mac[5]);
-#endif
-
-#ifdef LUAT_USE_WLAN
-	ret = tls_ft_param_get(CMD_WIFI_MAC, mac_addr, 6);
-	if (ret) {
-		printf("tls_ft_param_get mac addr FALED %d !!!\n", ret);
-	}
-	tls_ft_param_get(CMD_WIFI_MACAP, ap_mac, 6);
-	//printf("CMD_WIFI_MAC ret %d %02X%02X%02X%02X%02X%02X\n", ret, mac_addr[0], mac_addr[1], mac_addr[2], mac_addr[3], mac_addr[4], mac_addr[5]);
-	int sta_mac_ok = is_mac_ok(mac_addr);
-	int ap_mac_ok = is_mac_ok(ap_mac);
-
-	// 其中一个合法呢?
-	if (sta_mac_ok && !ap_mac_ok) {
-		printf("sta地址合法, ap地址不合法\n");
-		memcpy(ap_mac, mac_addr, 6);
-	}
-	else if (!sta_mac_ok && ap_mac_ok) {
-		printf("sta地址不合法, ap地址合法\n");
-		memcpy(mac_addr, ap_mac, 6);
-	}
-	else if (!sta_mac_ok && !ap_mac_ok){ // 均不合法, 那就用uniqid
-		printf("sta地址不合法, ap地址不合法\n");
-		if (unique_id[1] == 0x10){
-			memcpy(mac_addr, unique_id + 12, 6);
-		}
-		else {
-			memcpy(mac_addr, unique_id + 4, 6);
-		}
-        mac_addr[0] = 0x0C;
-        for (size_t i = 1; i < 6; i++)
-        {
-            if (mac_addr[i] == 0 || mac_addr[i] == 0xFF) {
-                mac_addr[i] = 0x01;
-            }
-        }
-		memcpy(ap_mac, mac_addr, 6);
-	}
-
-	if (!memcmp(mac_addr, ap_mac, 6)) {
-		printf("sta与ap地址相同, 调整ap地址\n");
-		// 完全相同, 那就改一下ap的地址
-		if (ap_mac[5] == 0x01 || ap_mac[5] == 0xFE) {
-			ap_mac[5] = 0x02;
-		}
-		else {
-			ap_mac[5] += 1;
-		}
-	}
-
-	// 全部mac都得到了, 然后重新读一下mac, 不相同的就重新写入
-	
-	// 先判断sta的mac
-	tls_ft_param_get(CMD_WIFI_MAC, tmp_mac, 6);
-	if (memcmp(tmp_mac, mac_addr, 6)) {
-		// 不一致, 写入
-		tls_ft_param_set(CMD_WIFI_MAC, mac_addr, 6);
-		printf("更新STA mac %02X%02X%02X%02X%02X%02X\n", mac_addr[0], mac_addr[1], mac_addr[2], mac_addr[3], mac_addr[4], mac_addr[5]);
-	}
-
-	// 再判断ap的mac
-	tls_ft_param_get(CMD_WIFI_MACAP, tmp_mac, 6);
-	if (memcmp(tmp_mac, ap_mac, 6)) {
-		// 不一致, 写入
-		tls_ft_param_set(CMD_WIFI_MACAP, ap_mac, 6);
-		printf("更新AP mac %02X%02X%02X%02X%02X%02X\n", ap_mac[0], ap_mac[1], ap_mac[2], ap_mac[3], ap_mac[4], ap_mac[5]);
-	}
-#endif
-}

+ 119 - 0
app/network/luat_wlan_air101.c

@@ -13,6 +13,7 @@
 #include "wm_wifi.h"
 #include "wm_netif.h"
 #include "wm_debug.h"
+#include "wm_internal_flash.h"
 
 #define LUAT_LOG_TAG "wlan"
 #include "luat_log.h"
@@ -592,3 +593,121 @@ int luat_wlan_set_station_ip(luat_wlan_station_info_t *info) {
     #endif
     return 0;
 }
+
+// MAC地址修正逻辑
+
+
+extern const u8 default_mac[];
+
+static int is_mac_ok(u8 mac_addr[6]) {
+
+	// 如果是默认值, 那就是不合法
+	if (!memcmp(mac_addr, default_mac, 6)) {
+        return 0;
+    }
+	// 如果任意一位是0x00或者0xFF,那就是不合法
+    for (size_t i = 0; i < 6; i++)
+    {
+        if (mac_addr[i] == 0 || mac_addr[i] == 0xFF) {
+            return 0;
+        }
+    }
+	return 1;
+}
+
+void sys_mac_init() {
+#ifdef LUAT_CONF_LOG_UART1
+	luat_log_set_uart_port(1);
+#endif
+	u8 tmp_mac[6] = {0};
+    u8 mac_addr[6] = {0};
+	u8 ap_mac[6] = {0};
+    unsigned  char unique_id [20] = {0};
+    tls_fls_read_unique_id(unique_id);
+	int ret = 0;
+
+#ifdef LUAT_USE_NIMBLE
+	// 读蓝牙mac, 如果是默认值,就根据unique_id读取
+	uint8_t bt_mac[6];
+	// 缺省mac C0:25:08:09:01:10
+	tls_get_bt_mac_addr(bt_mac);
+	if (!memcmp(bt_mac, default_mac, 6)) { // 看来是默认MAC, 那就改一下吧
+		if (unique_id[1] == 0x10){
+			memcpy(bt_mac, unique_id + 10, 6);
+		}
+		else {
+			memcpy(bt_mac, unique_id + 2, 6);
+		}
+		tls_set_bt_mac_addr(bt_mac);
+	}
+	LLOGD("BLE_4.2 %02X:%02X:%02X:%02X:%02X:%02X", bt_mac[0], bt_mac[1], bt_mac[2], bt_mac[3], bt_mac[4], bt_mac[5]);
+#endif
+
+#ifdef LUAT_USE_WLAN
+	ret = tls_ft_param_get(CMD_WIFI_MAC, mac_addr, 6);
+	if (ret) {
+		printf("tls_ft_param_get mac addr FALED %d !!!\n", ret);
+	}
+	tls_ft_param_get(CMD_WIFI_MACAP, ap_mac, 6);
+	//printf("CMD_WIFI_MAC ret %d %02X%02X%02X%02X%02X%02X\n", ret, mac_addr[0], mac_addr[1], mac_addr[2], mac_addr[3], mac_addr[4], mac_addr[5]);
+	int sta_mac_ok = is_mac_ok(mac_addr);
+	int ap_mac_ok = is_mac_ok(ap_mac);
+
+	// 其中一个合法呢?
+	if (sta_mac_ok && !ap_mac_ok) {
+		printf("sta地址合法, ap地址不合法\n");
+		memcpy(ap_mac, mac_addr, 6);
+	}
+	else if (!sta_mac_ok && ap_mac_ok) {
+		printf("sta地址不合法, ap地址合法\n");
+		memcpy(mac_addr, ap_mac, 6);
+	}
+	else if (!sta_mac_ok && !ap_mac_ok){ // 均不合法, 那就用uniqid
+		printf("sta地址不合法, ap地址不合法\n");
+		if (unique_id[1] == 0x10){
+			memcpy(mac_addr, unique_id + 12, 6);
+		}
+		else {
+			memcpy(mac_addr, unique_id + 4, 6);
+		}
+        mac_addr[0] = 0x0C;
+        for (size_t i = 1; i < 6; i++)
+        {
+            if (mac_addr[i] == 0 || mac_addr[i] == 0xFF) {
+                mac_addr[i] = 0x01;
+            }
+        }
+		memcpy(ap_mac, mac_addr, 6);
+	}
+
+	if (!memcmp(mac_addr, ap_mac, 6)) {
+		printf("sta与ap地址相同, 调整ap地址\n");
+		// 完全相同, 那就改一下ap的地址
+		if (ap_mac[5] == 0x01 || ap_mac[5] == 0xFE) {
+			ap_mac[5] = 0x02;
+		}
+		else {
+			ap_mac[5] += 1;
+		}
+	}
+
+	// 全部mac都得到了, 然后重新读一下mac, 不相同的就重新写入
+	
+	// 先判断sta的mac
+	tls_ft_param_get(CMD_WIFI_MAC, tmp_mac, 6);
+	if (memcmp(tmp_mac, mac_addr, 6)) {
+		// 不一致, 写入
+		tls_ft_param_set(CMD_WIFI_MAC, mac_addr, 6);
+		printf("更新STA mac %02X%02X%02X%02X%02X%02X\n", mac_addr[0], mac_addr[1], mac_addr[2], mac_addr[3], mac_addr[4], mac_addr[5]);
+	}
+
+	// 再判断ap的mac
+	tls_ft_param_get(CMD_WIFI_MACAP, tmp_mac, 6);
+	if (memcmp(tmp_mac, ap_mac, 6)) {
+		// 不一致, 写入
+		tls_ft_param_set(CMD_WIFI_MACAP, ap_mac, 6);
+		printf("更新AP mac %02X%02X%02X%02X%02X%02X\n", ap_mac[0], ap_mac[1], ap_mac[2], ap_mac[3], ap_mac[4], ap_mac[5]);
+	}
+#endif
+}
+