| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149 |
- /*
- * Copyright (c) 2006-2018, RT-Thread Development Team
- *
- * SPDX-License-Identifier: Apache-2.0
- *
- * Change Logs:
- * Date Author Notes
- * 2019-01-25 tyx add w600
- */
- #include <rtthread.h>
- #include <rtdevice.h>
- #include "oneshot.h"
- #define NET_READY_TIME_OUT (rt_tick_from_millisecond(30 * 1000))
- struct join_info
- {
- char ssid[64];
- char passwd[64];
- };
- static int rt_wlan_device_connetct(char *ssid, char *passwd)
- {
- int result = RT_EOK;
- rt_uint8_t time_cnt = 0;
- result = rt_wlan_connect(ssid, passwd);
- if (result != RT_EOK)
- {
- rt_kprintf("\nconnect ssid %s error:%d!\n", ssid, result);
- return result;
- };
- do
- {
- rt_thread_mdelay(1000);
- time_cnt ++;
- if (rt_wlan_is_ready())
- {
- break;
- }
- }
- while (time_cnt <= (NET_READY_TIME_OUT / 1000));
- if (time_cnt <= (NET_READY_TIME_OUT / 1000))
- {
- rt_kprintf("networking ready!\n");
- }
- else
- {
- rt_kprintf("wait ip got timeout!\n");
- result = -RT_ETIMEOUT;
- }
- return result;
- }
- static void join_wifi_thread(void *param)
- {
- struct join_info *info = param;
- rt_kprintf("connect wifi:%s\n", info->ssid);
- if (rt_strlen(info->passwd) > 0)
- {
- rt_wlan_device_connetct(info->ssid, info->passwd);
- }
- else
- {
- rt_wlan_device_connetct(info->ssid, RT_NULL);
- }
- rt_free(info);
- }
- static void wm_oneshot_result_cb(int state, unsigned char *ssid, unsigned char *passwd)
- {
- rt_thread_t tid;
- struct join_info *info;
- if (state != 0)
- {
- rt_kprintf("Receive wifi info timeout(%d). exit!\n", state);
- return;
- }
- if (ssid == RT_NULL)
- {
- rt_kprintf("SSID is NULL. exit!\n");
- return;
- }
- rt_kprintf("Receive ssid:%s passwd:%s\n", ssid == RT_NULL ? "" : ssid, passwd == RT_NULL ? "" : passwd);
- info = rt_malloc(sizeof(struct join_info));
- if (info == RT_NULL)
- {
- return;
- }
- rt_memset(info, 0, sizeof(struct join_info));
- rt_strncpy(info->ssid, ssid, sizeof(info->ssid));
- if (passwd)
- {
- rt_strncpy(info->passwd, passwd, sizeof(info->passwd));
- }
- tid = rt_thread_create("join", join_wifi_thread, info, 2048, 22, 20);
- if (tid == RT_NULL)
- {
- rt_free(info);
- return;
- }
- rt_thread_startup(tid);
- }
- void oneshot_demo(int argc, char *argv[])
- {
- WM_ONESHOT_MODE mode = WM_UDP;
- if (argc > 2)
- {
- rt_kprintf("use: %s [web]", __FUNCTION__);
- return;
- }
- if (argc == 2)
- {
- if (rt_strcmp("web", argv[1]) == 0)
- {
- mode = WM_APWEB;
- }
- else if(rt_strcmp("udp", argv[1]) == 0)
- {
- mode = WM_UDP;
- }
- else
- {
- rt_kprintf("use: %s [web]", __FUNCTION__);
- return;
- }
- }
- if (wm_oneshot_start(mode, wm_oneshot_result_cb) == 0)
- {
- rt_kprintf("oneshot start...\n");
- }
- else
- {
- rt_kprintf("oneshot start failed\n");
- }
- }
- #ifdef RT_USING_FINSH
- #include "finsh.h"
- MSH_CMD_EXPORT(oneshot_demo, oneshot demo);
- #endif
|