luat_airlink_cmd_exec_info.c 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  1. #include "luat_base.h"
  2. #include "luat_spi.h"
  3. #include "luat_airlink.h"
  4. #include "luat_rtos.h"
  5. #include "luat_debug.h"
  6. #include "luat_spi.h"
  7. #include "luat_pm.h"
  8. #include "luat_gpio.h"
  9. #include "luat_airlink.h"
  10. #include "luat_fota.h"
  11. #include "luat_netdrv.h"
  12. #include "luat_network_adapter.h"
  13. #include "lwip/netif.h"
  14. #include "lwip/pbuf.h"
  15. #include "lwip/ip_addr.h"
  16. #include "luat_netdrv_whale.h"
  17. #include "luat_netdrv_event.h"
  18. #define LUAT_LOG_TAG "airlink"
  19. #include "luat_log.h"
  20. __AIRLINK_CODE_IN_RAM__ int luat_airlink_cmd_exec_dev_info(luat_airlink_cmd_t* cmd, void* userdata) {
  21. luat_airlink_dev_info_t* dev = cmd->data;
  22. luat_netdrv_t* drv = NULL;
  23. char buff[32] = {0};
  24. uint32_t version = 0;
  25. // LLOGD("收到设备信息通知 类型 %d", dev->tp);
  26. if (dev->tp == 0) {
  27. return 0;
  28. }
  29. size_t len = sizeof(luat_airlink_dev_info_t);
  30. if (len > cmd->len) {
  31. len = cmd->len; // 为了兼容老版本的wifi固件, 需要把数据截断, 如果超过的话
  32. }
  33. else {
  34. // wifi固件比4G固件更新的, 那就抛弃掉后面的数据
  35. }
  36. memcpy(&g_airlink_ext_dev_info, dev, len);
  37. #ifdef LUAT_USE_DRV_WLAN
  38. if (dev->tp == 1) {
  39. // WIFI设备
  40. // 首先, 把MAC地址打印出来
  41. // LLOGD("wifi sta MAC %02X:%02X:%02X:%02X:%02X:%02X", dev->wifi.sta_mac[0], dev->wifi.sta_mac[1], dev->wifi.sta_mac[2], dev->wifi.sta_mac[3], dev->wifi.sta_mac[4], dev->wifi.sta_mac[5]);
  42. if (dev->wifi.sta_mac[0]) {
  43. memcpy(&version, dev->wifi.version, 4);
  44. // 是合法的MAC地址, 那就搞一下
  45. drv = luat_netdrv_get(NW_ADAPTER_INDEX_LWIP_WIFI_STA);
  46. while (1) {
  47. if (drv == NULL) {
  48. // LLOGD("没有找到lwip wifi sta驱动, 无法设置MAC地址");
  49. break;
  50. }
  51. if (drv->netif == NULL) {
  52. // LLOGD("没有找到lwip wifi sta接口, 无法设置MAC地址");
  53. break;
  54. }
  55. memcpy(drv->netif->hwaddr, dev->wifi.sta_mac, 6);
  56. drv->netif->hwaddr_len = 6;
  57. // STA网络状态对吗?
  58. // LLOGD("sta station %d netif link is %d", dev->wifi.sta_state, netif_is_link_up(drv->netif));
  59. if (dev->wifi.sta_state == 0) {
  60. if (netif_is_link_up(drv->netif)) {
  61. // 网卡掉线了哦
  62. LLOGD("wifi sta掉线了");
  63. // luat_netdrv_whale_ipevent(drv, 0);
  64. luat_netdrv_set_link_updown(drv, 0);
  65. }
  66. }
  67. else {
  68. if (netif_is_link_up(drv->netif) == 0) {
  69. // 网卡上线了哦
  70. LLOGD("wifi sta上线了");
  71. // luat_netdrv_whale_ipevent(drv, 1);
  72. luat_netdrv_set_link_updown(drv, 1);
  73. }
  74. }
  75. break;
  76. }
  77. drv = luat_netdrv_get(NW_ADAPTER_INDEX_LWIP_WIFI_AP);
  78. while (1) {
  79. if (drv == NULL) {
  80. // LLOGD("没有找到lwip wifi ap驱动, 无法设置MAC地址");
  81. break;
  82. }
  83. if (drv->netif == NULL) {
  84. // LLOGD("没有找到lwip wifi ap接口, 无法设置MAC地址");
  85. break;
  86. }
  87. drv->netif->hwaddr_len = 6;
  88. memcpy(drv->netif->hwaddr, dev->wifi.ap_mac, 6);
  89. // 如果wifi固件版本是0, 那需要兼容一下AP状态
  90. if (version == 0) {
  91. dev->wifi.ap_state = 1;
  92. }
  93. // AP网络状态对吗?
  94. if (dev->wifi.ap_state == 0) {
  95. if (netif_is_link_up(drv->netif)) {
  96. // 网卡掉线了哦
  97. LLOGD("wifi ap已关闭");
  98. // luat_netdrv_whale_ipevent(drv, 0);
  99. luat_netdrv_set_link_updown(drv, 0);
  100. }
  101. }
  102. else {
  103. if (netif_is_link_up(drv->netif) == 0) {
  104. // 网卡上线了哦
  105. ipaddr_ntoa_r(&drv->netif->ip_addr, buff, 32);
  106. LLOGD("wifi ap已开启 %s %p", buff, drv->netif);
  107. // luat_netdrv_whale_ipevent(drv, 1);
  108. luat_netdrv_set_link_updown(drv, 1);
  109. }
  110. }
  111. break;
  112. }
  113. }
  114. }
  115. #endif
  116. #ifdef LUAT_USE_DRV_MOBILE
  117. if (dev->tp == 2) { // 4G设备
  118. // 根据网络状态, 发出IP_READY/IP_LOSE事件
  119. drv = luat_netdrv_get(NW_ADAPTER_INDEX_LWIP_GP_GW);
  120. if (drv == NULL || drv->netif == NULL) {
  121. // GP代理网卡没有找到, 可能是没有初始化
  122. return 0;
  123. }
  124. // 1是已注册, 5是漫游且已注册
  125. if (dev->cat1.cat_state != 1 && dev->cat1.cat_state != 5) {
  126. // 掉线了
  127. if (netif_is_link_up(drv->netif)) {
  128. // 网卡掉线了哦
  129. LLOGD("4G代理网卡掉线了");
  130. // luat_netdrv_whale_ipevent(drv, 0);
  131. luat_netdrv_set_link_updown(drv, 0);
  132. }
  133. }
  134. else {
  135. // 上线了
  136. if (netif_is_link_up(drv->netif) == 0) {
  137. // 网卡上线了哦
  138. LLOGD("4G代理网卡上线了");
  139. // luat_netdrv_whale_ipevent(drv, 1);
  140. luat_netdrv_set_link_updown(drv, 1);
  141. }
  142. }
  143. }
  144. #endif
  145. return 0;
  146. }