luat_zlink_wlan.c 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192
  1. #include <string.h>
  2. #include "wm_irq.h"
  3. #include "tls_sys.h"
  4. #include "wm_regs.h"
  5. #include "wm_type_def.h"
  6. #include "wm_timer.h"
  7. #include "wm_irq.h"
  8. #include "wm_params.h"
  9. #include "wm_hostspi.h"
  10. #include "wm_flash.h"
  11. #include "wm_fls_gd25qxx.h"
  12. #include "wm_internal_flash.h"
  13. #include "wm_efuse.h"
  14. #include "wm_debug.h"
  15. #include "wm_netif.h"
  16. #include "wm_at_ri_init.h"
  17. #include "wm_config.h"
  18. #include "wm_osal.h"
  19. #include "wm_http_client.h"
  20. #include "wm_cpu.h"
  21. #include "wm_webserver.h"
  22. #include "wm_io.h"
  23. #include "wm_mem.h"
  24. #include "wm_wl_task.h"
  25. #include "wm_wl_timers.h"
  26. #ifdef TLS_CONFIG_HARD_CRYPTO
  27. #include "wm_crypto_hard.h"
  28. #endif
  29. #include "wm_gpio_afsel.h"
  30. #include "wm_pmu.h"
  31. #include "wm_ram_config.h"
  32. #include "wm_uart.h"
  33. #include "luat_conf_bsp.h"
  34. #include "wm_watchdog.h"
  35. #include "wm_wifi.h"
  36. #if TLS_CONFIG_ONLY_FACTORY_ATCMD
  37. #include "../../src/app/factorycmd/factory_atcmd.h"
  38. #endif
  39. #include "wm_flash_map.h"
  40. #include "wm_wifi.h"
  41. #include "luat_base.h"
  42. #include "luat_msgbus.h"
  43. #include "luat_timer.h"
  44. #include "luat_gpio.h"
  45. #include "luat_uart.h"
  46. #include "luat_spi.h"
  47. #include "luat_malloc.h"
  48. #include "luat_uart.h"
  49. #if 0
  50. #include "luat_zlink.h"
  51. #include "crc.h"
  52. #define LUAT_LOG_TAG "zlink.wlan"
  53. #include "luat_log.h"
  54. uint32_t zlink_pkgid = 0;
  55. extern u8* tls_wifi_buffer_acquire(int total_len);
  56. extern void tls_wifi_buffer_release(bool is_apsta, u8* buffer);
  57. static void zlink_wifi_status_change(uint8_t status) {
  58. LLOGD("wifi status change to %d", status);
  59. }
  60. static int zlink_net_rx_data_cb(const u8 *bssid, u8 *buf, u32 buf_len) {
  61. // LLOGD("net recv %d bytes", buf_len);
  62. // if (buf_len == 60)
  63. // return 0;
  64. printf("net recv %d bytes\n", buf_len);
  65. // u8 mac_source[6];
  66. // u8 mac_dest[6];
  67. // memcpy(mac_source, buf + 6, 6);
  68. // memcpy(mac_dest, buf, 6);
  69. // printf("OUT %02x:%02x:%02x:%02x:%02x:%02x -> %02x:%02x:%02x:%02x:%02x:%02x %u len %u\n",
  70. // mac_source[0], mac_source[1], mac_source[2], mac_source[3], mac_source[4], mac_source[5],
  71. // mac_dest[0], mac_dest[1], mac_dest[2], mac_dest[3], mac_dest[4], mac_dest[5],
  72. // buf[12], buf_len);
  73. uint32_t checksum = calcCRC32(buf, buf_len);
  74. // printf("CRC %08X\n", checksum);
  75. luat_zlink_pkg_t zd = {0};
  76. memcpy(zd.magic, "ZLNK", 4);
  77. zd.pkgid[0] = zlink_pkgid >> 24;
  78. zd.pkgid[1] = zlink_pkgid >> 16;
  79. zd.pkgid[2] = zlink_pkgid >> 8;
  80. zd.pkgid[3] = zlink_pkgid & 0xFF;
  81. zlink_pkgid ++;
  82. zd.cmd0 = 2; // mac包
  83. zd.cmd1 = 1; // 发送
  84. u16 len = buf_len + 4;
  85. zd.len[0] = len >> 8;
  86. zd.len[1] = len & 0xFF;
  87. luat_uart_write(1, &zd, sizeof(luat_zlink_pkg_t));
  88. luat_uart_write(1, "\0\0", 2);
  89. luat_uart_write(1, buf, buf_len);
  90. return 0;
  91. }
  92. //串口数量,编号从0开始
  93. #define MAX_DEVICE_COUNT TLS_UART_MAX
  94. //存放串口设备句柄
  95. // static uint32_t serials_buff_len[MAX_DEVICE_COUNT] ={TLS_UART_RX_BUF_SIZE};
  96. extern struct tls_uart_port uart_port[TLS_UART_MAX];
  97. #define BUFF_SIZE (4096)
  98. static u8 uart_buff[BUFF_SIZE];
  99. static uint16_t buff_offset;
  100. static s16 uart_input_cb(u16 len, void* userdata) {
  101. // printf("uart_input_cb %d\n", len);
  102. // if(CIRC_CNT(uart_port[1].recv.head, uart_port[1].recv.tail, TLS_UART_RX_BUF_SIZE)
  103. // < (serials_buff_len[1] - 200))
  104. // return 0;
  105. // if (len == 0)
  106. // return 0;
  107. // if (buff_offset + len > BUFF_SIZE) {
  108. // buff_offset = 0;
  109. // }
  110. len = luat_uart_read(1, uart_buff + buff_offset, BUFF_SIZE - buff_offset);
  111. if (len & 0x8000) {
  112. printf("luat_uart_read %d\n", len);
  113. return 0;
  114. }
  115. if (len == 0) {
  116. return 0;
  117. }
  118. buff_offset += len;
  119. if (buff_offset < 12) {
  120. // printf("数据还不够 %d\n", len);
  121. return 0;
  122. }
  123. luat_zlink_pkg_t* zd = (luat_zlink_pkg_t*)uart_buff;
  124. if (memcmp(zd->magic, "ZLNK", 4) != 0) {
  125. printf("数据包开头不是ZINK\n");
  126. buff_offset = 0;
  127. return 0;
  128. }
  129. u16 zlen = (zd->len[0] << 8) | zd->len[1];
  130. if (buff_offset >= zlen + 12) {
  131. printf("完整的zlink数据包来了\n");
  132. if (zd->cmd0 == 2 && zd->cmd1 == 1) {
  133. // wifi mac包
  134. printf("mac包 %d\n", zlen - 4);
  135. u8* ptr = tls_wifi_buffer_acquire(zlen - 4);
  136. if (ptr) {
  137. printf("发送到wifi\n");
  138. memcpy(ptr, uart_buff + 16, zlen - 4);
  139. tls_wifi_buffer_release(false, ptr);
  140. }
  141. else {
  142. printf("wifi buffer full?\n");
  143. }
  144. }
  145. buff_offset -= zlen + 12;
  146. }
  147. else {
  148. // printf("数据包不完整,等待数据\n");
  149. }
  150. return 0;
  151. }
  152. void luat_zlink_wlan_init(void) {
  153. // tls_uart_options_t opt = {0};
  154. // opt.baudrate = UART_BAUDRATE_B115200;
  155. // opt.charlength = TLS_UART_CHSIZE_8BIT;
  156. // opt.flow_ctrl = TLS_UART_FLOW_CTRL_NONE;
  157. // opt.paritytype = TLS_UART_PMODE_DISABLED;
  158. // opt.stopbits = TLS_UART_ONE_STOPBITS;
  159. // tls_uart_port_init(1, &opt, 0);
  160. luat_uart_t conf = {0};
  161. conf.id = 1;
  162. conf.baud_rate = 115200;
  163. conf.data_bits = 8;
  164. conf.stop_bits = 1;
  165. conf.parity = LUAT_PARITY_NONE;
  166. luat_uart_setup(&conf);
  167. tls_uart_rx_callback_register(1, uart_input_cb, NULL);
  168. tls_wifi_status_change_cb_register(zlink_wifi_status_change);
  169. tls_ethernet_data_rx_callback(zlink_net_rx_data_cb);
  170. }
  171. #endif