admin管理员组文章数量:1658731
#include <stdint.h>
#include <sys/types.h> /* See NOTES */
#include <sys/socket.h>
#include <netinet/in.h>
#include <stdio.h>
#include "wifimng.h"
#define LOCAL_PORT (5050)
#define UI_WIFI_PWD_SSID_LEN (16)
static int8_t g_server_id[32] = {0};
typedef enum
{
TRUE = 0,
FALSE
} BOOL;
typedef enum en_PDT_UI_WIFI_CHOOSE_MODE //wifi开始时候进入的步骤
{
PDT_UI_WIFI_SSID_PWD = 0,
PDT_UI_WIFI_CONNECT_WIFI,
PDT_UI_WIFI_GET_WIFI_SERVER_IP,
PDT_UI_WIFI_CONNECT_TCP_SERVER,
PDT_UI_WIFI_CONNECT_TCP_RECV,
PDT_UI_WIFI_MODE_BUTTU
} PDT_UI_WIFI_CHOOSE_MODE;
typedef enum en_PDT_UI_WIFI_MSG_FLAG //wifi密码成功失败
{
PDT_UI_WIFI_SSID_PWD_SUCCESS = 0,
PDT_UI_WIFI_SSID_PWD_FAIL,
PDT_UI_WIFI_SSID_PWD_NULL,
PDT_UI_WIFI_BUTTU
} PDT_UI_WIFI_MSG_FLAG;
typedef struct hiUI_WIFI_SSID_PWD
{
int8_t wifi_ssid[UI_WIFI_PWD_SSID_LEN];
int8_t wifi_pwd[UI_WIFI_PWD_SSID_LEN];
} UI_WIFI_SSID_PWD;
static int32_t g_wifi_socket_fd = 0; //socket文件描述符
// socket 连接server
int socket_connect_server(uint8_t re_times)
{
uint8_t re_times_tmp = re_times;
struct sockaddr_in server_addr;
struct sockaddr_in server_addr1;
bzero(&server_addr, sizeof(server_addr)); //初始化结构体
server_addr.sin_family = AF_INET; //设置地址家族
server_addr.sin_port = htons(LOCAL_PORT); //设置端口号,将主机的无符号短整形数转换成网络字节顺序
server_addr.sin_addr.s_addr = inet_addr((char *)g_server_id); //主机地址,将一个 ip 地址字符串转换成一个整数值;
printf("-----g_server_id--=%s------\n", (char *)g_server_id);
if (inet_pton(AF_INET, (char *)g_server_id, &server_addr1.sin_addr) <= 0) // ip地址都是null的说明是非法的,获取也没用,重新获取
{
printf("[%s] is not a valid IPaddress\n", g_server_id);
// exit(1);
return -1;
}
g_wifi_socket_fd = socket(AF_INET, SOCK_STREAM, 0); //创建socket
if (g_wifi_socket_fd < 0)
{
printf("---create ----socket--faile--\n");
return g_wifi_socket_fd;
}
while (re_times_tmp--)
{
sleep(1);
if (-1 == connect(g_wifi_socket_fd, (struct sockaddr *)&server_addr, sizeof(struct sockaddr_in))) //连接server
{
printf("---connect ----host--faile--\n");
continue;
}
else
{
printf("---connect ----success--\n");
break;
}
}
if(re_times_tmp == 0)
{
return FALSE;
}
int32_t ret = 0;
int32_t err_times = 0;
char sendline[1024] = "hahahah";
while(1)
{
memset(sendline,0x0,sizeof(sendline));
//3.增加v2x原始数据的接口
//if(无数据)
//{
//usleep(200*1000);
//continue;
//}
//发送
ret = write(g_wifi_socket_fd , sendline , strlen(sendline));
if(ret < strlen(sendline))
{
perror("write error");
err_times++;
if(err_times > 3)//30次收不到数据就退出
{
break;
}
continue;
}
err_times = 0;
}
return TRUE;
}
//获取wifi地址
int pdt_ui_get_wifi_serverip(uint8_t re_times, uint8_t *wifi_server_id)
{
uint8_t re_times_tmp = re_times;
while (re_times_tmp--)
{
sleep(1);
printf("--------------get---ipsddr-------\n");
if (TRUE == get_gateway((char *)g_server_id))
{
memcpy(wifi_server_id, g_server_id, sizeof(g_server_id));
printf("--------------get---ipsddr---success--------\n");
return TRUE;
}
else if (-1 == get_gateway((char *)g_server_id))
{
printf("--------------get---ipsddr---faile--------\n");
return FALSE;
}
}
return re_times;
}
UI_WIFI_SSID_PWD g_wifi_information = {0};
//连接wifi,根据自己的sdk来掉取命令或api
int pdt_ui_wifi_connect(uint8_t re_times)
{
int32_t ret = TRUE;
uint8_t re_times_tmp = re_times;
//HI_HAL_WIFI_Disconnect(); //断开wifi
// memmove(&stCfg.unCfg.stStaCfg.unCfg.stSeniorCfg.stCfg.szWiFiSSID, g_wifi_information.wifi_ssid, UI_WIFI_PWD_SSID_LEN);
//memmove(&stCfg.unCfg.stStaCfg.unCfg.stSeniorCfg.stCfg.szWiFiPWD, g_wifi_information.wifi_pwd, UI_WIFI_PWD_SSID_LEN);
while (re_times--)
{
sleep(1);
printf("-----connect=----------\n");
// ret = HI_HAL_WIFI_Connect(&stCfg.unCfg.stStaCfg.unCfg.stSeniorCfg); //连接wifi
if (ret != TRUE)
{
printf("------HI_HAL_WIFI_Scan--faile---\n");
return ret;
}
else
{
return TRUE;
}
printf("------------ret=%d---\n", ret);
}
return re_times;
}
// 获取wifi名密码
int get_wifi_msg_from_bt(void)
{
//用与从蓝牙获取wifi名字跟密码
#ifdef CONFIG_BLUETOOTH_ON
uint8_t wifi_ssid_pass_status = BTMNG_NAVIGATION_STATUS_BUTT;
hi_btmng_get_wifi_ssid_pass_status(&wifi_ssid_pass_status);//获取wifi名跟用户名成功的标志
// printf("-----------------wifi_ssid_pass_status----=%d--\n", wifi_ssid_pass_status);
if (wifi_ssid_pass_status == BTMNG_NAVIGATION_STATUS_WIFI_SSID_PASS_SUCCESS)//成功获取到wifi名跟密码
{
mcu_get_wifi_ssid_pwd(&g_wifi_information);// 1.替换为当前获取用户名,跟密码的接口
if (strlen((char *)g_wifi_information.wifi_ssid) && strlen((char *)g_wifi_information.wifi_pwd))
{
return PDT_UI_WIFI_SSID_PWD_SUCCESS;//成功返回标志
}
else
{
return PDT_UI_WIFI_SSID_PWD_NULL;
}
}
#endif
return PDT_UI_WIFI_SSID_PWD_FAIL;
}
/*
需要修改点
1.增加获取用户名,跟密码的接口
2.增加wifi断开,wifi连接接口
3.增加v2x原始数据的接口
4.把 CONFIG_BLUETOOTH_ON 打开
*/
// int v2x_original_data_send(void)
int main()
{
//1.判断wifi用户名,密码
//2. 连接wifi
//3.连接server
//4.接收数据
uint8_t start_mode_status = PDT_UI_WIFI_SSID_PWD;
uint8_t ssid_buff[64] = {0};
//uint8_t wifi_ssid_pas_status = BTMNG_NAVIGATION_STATUS_BUTT;
int ret = TRUE;
while(1)
{
sleep(1);
switch (start_mode_status)
{
case PDT_UI_WIFI_SSID_PWD://获取用户名
// printf("-----------PDT_UI_WIFI_SSID_PWD------\n");
if (PDT_UI_WIFI_SSID_PWD_SUCCESS == get_wifi_msg_from_bt()) //密码获取成功
{
start_mode_status = PDT_UI_WIFI_CONNECT_WIFI;
}
//wifi_ssid_pas_status = BTMNG_NAVIGATION_STATUS_BUTT;//用户名跟密码成功的标志位置0
// hi_btmng_set_wifi_ssid_pass_success_flag(&wifi_ssid_pas_status); //蓝牙发送热点名称,密码状态
break;
case PDT_UI_WIFI_CONNECT_WIFI://连接wifi
if (TRUE == pdt_ui_wifi_connect(10))//连接成功
{
start_mode_status = PDT_UI_WIFI_GET_WIFI_SERVER_IP;
}
else
{
start_mode_status = PDT_UI_WIFI_SSID_PWD; //设置用户名,密码
}
break;
case PDT_UI_WIFI_GET_WIFI_SERVER_IP: //获取wifi server地址
ret = pdt_ui_get_wifi_serverip(10, ssid_buff);
if (TRUE < ret) // 获取10次没有获取到
{
start_mode_status = PDT_UI_WIFI_CONNECT_WIFI; // 重新连接返回连接热点,地址/wifi异常
}
else if( TRUE == ret)// 获取成功
{
start_mode_status = PDT_UI_WIFI_CONNECT_TCP_RECV;
}
else if (FALSE == ret) //获取失败
{
start_mode_status = PDT_UI_WIFI_SSID_PWD;// 重新等待获wifi用户名密码
}
break;
case PDT_UI_WIFI_CONNECT_TCP_RECV://连接tcp
printf("-----------PDT_UI_WIFI_CONNECT_TCP_RECV------\n");
socket_connect_server(10);
start_mode_status = PDT_UI_WIFI_SSID_PWD; // 重新等待wifi用户名
break;
default:
break;
}
}
}
版权声明:本文标题:获取wifi用户名连接热点 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.elefans.com/dianzi/1729818689a1213866.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论