当前位置: 首页 > news >正文

nvidia设置wifi和接口

tx-nx设置wifi和接口

  • 前言
  • 基础知识点
    • 1.创建和删除一个wifi连接
    • 2. 启动连接和关闭连接
  • 代码和调试
    • 1. 代码展示
    • 2. 调试
  • 写到最后

前言

针对嵌入式开发,有时候通过QT或PAD跨网络对设备设置WIFI,在此记录下,方便后续的查阅。


基础知识点

1.创建和删除一个wifi连接

创建WIFI 连接

nmcli device wifi connect "SSID" password "passwd"

每次创建在/etc/NetworkManager/system-connections/目录下TR106-4文件多个,分别为"TR106" “TR106-4 1” TR106-4 2 …为什么有多个,笔者可能觉得是因为存在相同的SSID,不同的PASSWD的原因吧!

删除wifi连接
p.s:不允许手动rm删除,删除依然会保留到nmcli con show中

nmcli con del "SSID"

2. 启动连接和关闭连接

启动

nmcli connection up "TR106"或 nmcli device con wlan0
nmcli device con wlan0

关闭wifi连接

nmcli connection down "TR106"或nmcli device dis wlan0
  1. 创建热点 暂不描述,后续如增加再做记录。

代码和调试

1. 代码展示

#ifndef WIFI_MANAGE_H__
#define WIFI_MANAGE_H__#include <vector>
#include <string>#ifndef NMCCLI_CON_SHOW_ACTIVE
#define NMCCLI_CON_SHOW_ACTIVE	"nmcli con show -active |grep wifi |grep wlan"
#endif #define OUT		//param out 
#define IN		//param in
#define MAX_STRING (1024)
#define MIN_STRING (128)
namespace NMV
{};
class CWifiManage
{
public:static CWifiManage *inst(){static CWifiManage wm;return &wm;}/**获取设备WIFI扫描的列表*/int getWifiSSIDScanf();const std::vector<std::string> &getSsidList()const {return m_ssid_list;}/**获取当前wlanx已连接的WIFI ssid和passwd,当前只有wlan0,如果有多个wlan,需要做修改*/int getSystemWlanxInfo(std::string &rhs_ssid, std::string &rhs_passwd);/**获取当前的SSID和PASSWD*/int getWifiInfo(std::string &rhs_ssid, std::string &rhs_passwd)const {rhs_ssid = m_WifiSsid; rhs_passwd = m_WifiPasswd;}/**设置一个wifi信息到系统,切换WIFI的操作*/int setWifiInfo2SystemNetwork(const std::string &rhs_ssid, const std::string &rhs_passwd,OUT char *sys_response);/**外部接口,设置WIFI*/int setWifiInfo(const std::string &rhs_ssid, const std::string &rhs_passwd);
private:CWifiManage();~CWifiManage();std::string m_WifiSsid, m_WifiPasswd;std::vector<std::string> m_ssid_list;
};#endif
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>#include <string.h>#include <string>
#include <iostream>
#include <codecvt>#include "wifi_manage.h"CWifiManage::CWifiManage():m_WifiSsid(""), m_WifiPasswd("")
{m_ssid_list.clear();
}CWifiManage::~CWifiManage()
{}int CWifiManage::getSystemWlanxInfo(OUT std::string &rhs_ssid, OUT std::string &rhs_passwd)
{char pipeBuf[MAX_STRING] = {0};char tssid[MIN_STRING] = {0};FILE * pPipe = popen(NMCCLI_CON_SHOW_ACTIVE, "r");if(!pPipe){printf("PIPE ERROR\n");return -1;}size_t pipeSiz = ftell(pPipe);fseek(pPipe, 0, SEEK_SET);fread(pipeBuf, 1, pipeSiz, pPipe);if(pPipe){pclose(pPipe); pPipe = (FILE*)0;}if(!strlen(pipeBuf)){printf("无连接上的WIFI!\n");return -1;}sscanf(pipeBuf, "%s", tssid);/*根据SSID查看Passwd*/char ssidFileConfigure[MIN_STRING] = {0};snprintf(ssidFileConfigure, MIN_STRING-1, "/etc/NetworkManager/system-connections/%s", tssid);FILE *fp = fopen(ssidFileConfigure, "r");if(!fp){printf("打开%s失败!\n", ssidFileConfigure);return -1;}char line_buf[MIN_STRING] = {0};char tpasswd[MIN_STRING] = {0};while(!feof(fp)){memset(line_buf, 0, MIN_STRING);fgets(line_buf, MIN_STRING, fp);if(strstr(line_buf, "psk=")){size_t line_siz = strlen(line_buf);if(line_buf[line_siz-1] == '\n') line_buf[line_siz-1] = '\0';memcpy(tpasswd, line_buf+strlen("psk="), strlen(line_buf+strlen("psk=")));printf("passwd:%s, siz:%lu!\n" , tpasswd, strlen(tpasswd));}}if(fp){fclose(fp); fp = (FILE*)0;}if(strlen(tssid)&& strlen(tpasswd)){rhs_ssid = tssid; rhs_passwd = tpasswd;}return 0;}int CWifiManage::setWifiInfo2SystemNetwork(const std::string &rhs_ssid, const std::string &rhs_passwd,char *sys_response)
{char cmd_string[MIN_STRING] = {0};memset(cmd_string, 0, MIN_STRING);snprintf(cmd_string, MIN_STRING, "nmcli device wifi connect %s password %s", rhs_ssid.c_str(), rhs_passwd.c_str());FILE *pPipe = popen(cmd_string, "r"); //阻塞if(!pPipe){printf("cmdString: %s, err:%s\n" , cmd_string, strerror(errno));memcpy(sys_response, "pipe null", strlen("pipe null"));return -1;}fread(sys_response, 1, MAX_STRING-1, pPipe);pclose(pPipe); pPipe = (FILE*)0;if(!strstr(sys_response, "successfully"))			//如果设置失败{return -2;}printf("SSID:%s 设置成功!\n", rhs_ssid.c_str());/*重置wifi为设置的ssid和信息,更新 "nmcli con show"*///1. 关闭之前的连接pPipe = popen("nmcli device dis wlan0", "r");if(pPipe){pclose(pPipe); pPipe = (FILE*)0;}//2 开启设置的连接memset(cmd_string, 0, MIN_STRING);snprintf(cmd_string, MIN_STRING, "nmcli connection up %s", rhs_ssid.c_str());pPipe = popen(cmd_string, "r");if(pPipe){pclose(pPipe); pPipe = (FILE*)0;}#if 0		//配置暂先不做处理//3 删除(忘记)不需要的WIFI连接 cmd:nmcli con del "SSID",仅保留设置的wifi有效pPipe = popen("ls /etc/NetworkManager/system-connections/ |grep -v 'Wire'", "r");char ssid[MIN_STRING];if(pPipe){while(!feof(pPipe)){memset(ssid, 0, MIN_STRING);fgets(ssid, MIN_STRING-1, pPipe);if(ssid[strlen(ssid)-1] == '\n') ssid[strlen(ssid)-1] = '\0';if(rhs_ssid == std::string(ssid)){continue;}comm_sys_cmd("nmcli con del %s", ssid);}}
#endifreturn 0;
}int CWifiManage::getWifiSSIDScanf()
{//扫描WIFI ESSID//do somethingschar cmd_string[MIN_STRING] = {0};char sline[MIN_STRING], ssid[MIN_STRING];memset(cmd_string, 0, MIN_STRING);snprintf(cmd_string, MIN_STRING, "iw wlan0 scan |grep SSID");	FILE *pPipe = (FILE*)0;pPipe = popen(cmd_string, "r");if(!pPipe){printf("cmdString: %s, err:%s\n" , cmd_string, strerror(errno));return -1;}while(!feof(pPipe)){memset(sline, 0, MIN_STRING);memset(ssid, 0 , MIN_STRING);fgets(sline, MIN_STRING, pPipe);int j = 0;for(int i = 0; i < strlen(sline); ++i){if(sline[i] == '\t' || sline[i] == '\n' || sline[i] == ' '){continue ;}ssid[j] = sline[i];j++;}//printf("ssid:%s, siz:%lu\n", ssid, strlen(ssid));if(0 == strlen(ssid) - strlen("SSID:") || strlen(sline) == 0 ){//printf("ssid为空\n");continue;}if(strstr(ssid, "x00")){printf("含有x00\n");continue;}static std::wstring_convert<std::codecvt_utf8<wchar_t> > strCnv;//	std::wstring test = strCnv.from_bytes(ssid);printf("%s\n", test.c_str());m_ssid_list.push_back(ssid+strlen("SSID:"));}auto vit = m_ssid_list.begin();for(; vit != m_ssid_list.end();++vit){	static int cnt = 0;std::cout <<  "SSID_siz:" << (*vit).size() << " "<< *vit << std::endl;;}if(pPipe){pclose(pPipe); pPipe = (FILE*)0;}return 0;
}int CWifiManage::setWifiInfo(const std::string &rhs_ssid, const std::string &rhs_passwd)
{char sys_resp[MAX_STRING] = {0};if(setWifiInfo2SystemNetwork(rhs_ssid, rhs_passwd,  sys_resp)){printf("设置wifi失败!");}std::cout << "设置wifi系统提示: " << sys_resp << std::endl;m_WifiSsid = rhs_ssid;m_WifiPasswd = rhs_passwd;return  0;
}int main(int argc, char *argv[])
{int ret = 0;
#if 0std::string str_ssid = "", str_passwd = "";ret = CWifiManage::inst()->getSystemWlanxInfo(str_ssid, str_passwd);if(ret == 0){printf("当前wifi已连接成功, ssid:%s, passwd:%s\n", str_ssid.c_str(), str_passwd.c_str());}if(CWifiManage::inst()->setWifiInfo("HONOR-Hello-Ouyang_2.4", "woshisunouyangaaaa")){printf("设置wifi失败!\n");}
#else CWifiManage::inst()->getWifiSSIDScanf();
#endif }

2. 调试

扫描中踢出了空格,换行和制表符
获取WIFI扫描

{"Jsonrpc": "1.0","Method": "GetWifiScan","Result": true,"SsidList": ["TR106-4","HONOR-Hello-Ouyang_2.4","HUAWEI-WANG","Maxvision-2.4G","HUAWEI-MV_SLAM_02","ymg","fanyiji-ceshi","Tenda_1D0130","cleanRobot","Xiaomi_DESKT","YUN","siweite7wifi","HUAWEI-MV_SLAM_00","HONOR-xunjian-Mast","HONOR-xunjian-Mast","jxkjc","Trans-4G-SanFanTest","TP-LINK_2.4G_D6D088","TR106-4","Maxvision-2.4G","ChinaNet-5pV3-5G","HUAWEI-MV_SLAM_00","HONOR-Hello-Ouyang_5G","HUAWEI-MV_SLAM_02","ROBOT_TEST","HONOR-0J14YA","xunjian"]
}

设置wifi过程中遇到的问题:

1. SSID不存在,返回如下错误
{"Jsonrpc": "1.0","Method": "SetWifiConnect","Params": null,"ResponseMsg": "ERROR:未扫描到SSID:TR106-41","Result": false
}
之前使用PAD对设备设置,用的是android的API扫描WIFI SSID,可能设备和WIFI处的位置不同,以及无线网卡的差异性,导致PAD搜索的SSID可能设备网卡搜不到的情况。

2.输入的密码错误

{"Jsonrpc": "1.0","Method": "SetWifiConnect","Params": null,"ResponseMsg": "ERROR:Error: Connection activation failed: (7) Secrets were required, but not provided.\n","Result": false
}

写到最后

1. 每次设置一个新WIFI,将之前的配置都删除掉,让设备只连最近更新的WIFI,后面考虑合理性以及手机android等
都采用保存配置的情况, 该功能就删除了。
2. 还有比较多的功能可以实现,比如忘记WIFI名称等功能。
忘记WIFI名称
pPipe = popen("ls /etc/NetworkManager/system-connections/ |grep -v 'Wire'", "r");char ssid[128];if(pPipe){while(!feof(pPipe)){memset(ssid, 0, MIN_STRING);fgets(ssid, MIN_STRING-1, pPipe);if(ssid[strlen(ssid)-1] == '\n') ssid[strlen(ssid)-1] = '\0';if(rhs_ssid == std::string(ssid)){continue;}std::string str_cmd = "nmcli con del" + " " + ssid;system(str_cmd.c_str());}}

相关文章:

nvidia设置wifi和接口

tx-nx设置wifi和接口前言基础知识点1.创建和删除一个wifi连接2. 启动连接和关闭连接代码和调试1. 代码展示2. 调试写到最后前言 针对嵌入式开发&#xff0c;有时候通过QT或PAD跨网络对设备设置WIFI&#xff0c;在此记录下&#xff0c;方便后续的查阅。 基础知识点 1.创建和删…...

PostgreSQL 变化数据捕捉(CDC)

PostgreSQL 变化数据捕捉&#xff08;CDC&#xff09;基于CDC&#xff08;变更数据捕捉&#xff09;的增量数据集成总体步骤&#xff1a;1.捕获源数据库中的更改数据2.将变更的数据转换为您的消费者可以接受的格式3.将数据发布到消费者或目标数据库PostgreSQL支持触发器&#x…...

Spring 事务【隔离级别与传播机制】

Spring 事务【隔离级别与传播机制】&#x1f34e;一.事务隔离级别&#x1f352;1.1 事务特性回顾&#x1f352;1.2 事务的隔离级别(5种)&#x1f352;1.3 事务隔离级别的设置&#x1f34e;二.Spring 事务传播机制&#x1f352;2.1 Spring 事务传播机制的作用&#x1f352;2.2 事…...

HTTP和HTTPS协议

HTTP协议 HTTP协议是一种应用层的协议&#xff0c;全称为超文本传输协议。 URL URL值统一资源定位标志&#xff0c;也就是俗称的网址。 协议方案名 http://表示的就是协议方案名&#xff0c;常用的协议有HTTP协议、HTTPS协议、FTP协议等。HTTPS协议是以HTTP协议为基础&#…...

day3——有关java运算符的笔记

今天主要学习的内容有java的运算符 赋值运算符算数运算符关系运算符逻辑运算符位运算符&#xff08;专门写一篇笔记&#xff09;条件运算符运算符的优先级流程控制 赋值运算符 赋值运算符&#xff08;&#xff09;主要用于给变量赋值&#xff0c;可以跟算数运算符相结合&…...

Git多人协同远程开发

1. 李四&#xff08;项目负责人&#xff09;操作步骤 在github中创建远程版本库testgit将基础代码上传⾄testgit远程库远程库中基于main分⽀创建dev分⽀将 githubleaflife/testgit 共享给组员李四继续在基础代码上添加⾃⼰负责的模块内容 2. 张三、王五&#xff08;组员&…...

Chapter4:机器人仿真

ROS1{\rm ROS1}ROS1的基础及应用&#xff0c;基于古月的课&#xff0c;各位可以去看&#xff0c;基于hawkbot{\rm hawkbot}hawkbot机器人进行实际操作。 ROS{\rm ROS}ROS版本&#xff1a;ROS1{\rm ROS1}ROS1的Melodic{\rm Melodic}Melodic&#xff1b;实际机器人&#xff1a;Ha…...

python(14)--集合

前言 本篇文章学习的是 python 中集合的基础知识。 集合元素的内容是不可变的&#xff0c;常见的元素有整数、浮点数、字符串、元组等。至于可变内容列表、字典、集合等不可以是集合元素。虽然集合不可以是集合的元素&#xff0c;但是集合本身是可变的&#xff0c;可以去增加或…...

【Spark分布式内存计算框架——Spark Core】4. RDD函数(中)Transformation函数、Action函数

3.2 Transformation函数 在Spark中Transformation操作表示将一个RDD通过一系列操作变为另一个RDD的过程&#xff0c;这个操作可能是简单的加减操作&#xff0c;也可能是某个函数或某一系列函数。值得注意的是Transformation操作并不会触发真正的计算&#xff0c;只会建立RDD间…...

Mysql 数据类型

1、数值数据类型 1.1 整数类型(精确值) INTEGER, INT, SMALLINT, TINYINT, MEDIUMINT, BIGINT MySQL支持SQL标准的整数类型INTEGER (或INT)和SMALLINT。作为标准的扩展&#xff0c;MySQL还支持整数类型TINYINT、MEDIUMINT和BIGINT。下表显示了每种整数类型所需的存储和范围。…...

运行Whisper笔记(1)

最近chatGPT很火&#xff0c;就去逛了一下openai的github项目。发现了这个项目。 这个项目可以识别视频中的音频&#xff0c;转换出字幕。 带着一颗好奇的心就尝试自己去部署玩一玩 跟着这篇文章一步步来进行安装&#xff0c;并且跟着这篇文章解决途中遇到的问题。 途中还会遇…...

2023年最强大的12款数据可视化工具,值得收藏

做数据分析也有年头了&#xff0c;好的坏的工具都用过&#xff0c;推荐几个觉得很好用的&#xff0c;避坑必看&#xff01; PS&#xff1a;一般比较成熟的公司里&#xff0c;数据分析工具不只是满足业务分析和报表制作&#xff0c;像我现在给我们公司选型BI工具&#xff0c;是做…...

LeetCode刷题系列 -- 523. 连续的子数组和

给你一个整数数组 nums 和一个整数 k &#xff0c;编写一个函数来判断该数组是否含有同时满足下述条件的连续子数组&#xff1a;子数组大小 至少为 2 &#xff0c;且子数组元素总和为 k 的倍数。如果存在&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。如果存…...

LeetCode刷题系列 -- 525. 连续数组

给定一个二进制数组 nums , 找到含有相同数量的 0 和 1 的最长连续子数组&#xff0c;并返回该子数组的长度。示例 1:输入: nums [0,1]输出: 2说明: [0, 1] 是具有相同数量 0 和 1 的最长连续子数组。示例 2:输入: nums [0,1,0]输出: 2说明: [0, 1] (或 [1, 0]) 是具有相同数…...

JavaEE15-Spring Boot统一功能处理

目录 1.统一用户登录权限效验 1.1.最初用户登录验证 1.2.Spring AOP用户统一登录验证的问题 1.3.Spring拦截器 1.3.1.创建自定义拦截器&#xff0c;实现 HandlerInterceptor 接口并重写 preHandle&#xff08;执行具体方法之前的预处理&#xff09;方法 1.3.2.将自定义拦…...

centos7.6 设置防火墙

1、查看系统版本 cat /etc/redhat-release2、查看防火墙运行状态 systemctl status firewalld这里可以看到当前是未运行状态(inactive)。 3、关闭开机自启动防火墙 systemctl disable firewalld.service4、启动防火墙并查看状态&#xff0c;系统默认 22 端口是开启的。 sy…...

在线支付系列【22】微信支付实战篇之集成服务商API

有道无术&#xff0c;术尚可求&#xff0c;有术无道&#xff0c;止于术。 文章目录前言1. 环境搭建2. 特约商户进件3. 统一下单总结前言 在上篇文档中&#xff0c;我们做好了接入前准备工作&#xff0c;接下来使用开源框架集成服务商相关API。 一个简单的支付系统完成支付流程…...

3.2 埃尔米特转置

定义 对于复矩阵&#xff0c;转置又不一样&#xff0c;常见的操作是共轭转置&#xff0c;也叫埃尔米特转置Hermitian transpose。埃尔米特转置就是对矩阵先共轭&#xff0c;再转置&#xff0c;一般来说用三种符号表示埃尔米特转置&#xff1a; 第一种符号是AHA^HAH&#xff0c…...

Python爬虫之Scrapy框架系列(13)——实战ZH小说爬取数据入MySql数据库

目录&#xff1a;1 数据持久化存储&#xff0c;写入Mysql数据库①定义结构化字段&#xff1a;②重新编写爬虫文件&#xff1a;③编写管道文件&#xff1a;④辅助配置&#xff08;修改settings.py文件&#xff09;&#xff1a;⑤navicat创库建表&#xff1a;⑥ 效果如下&#xf…...

MySQL篇02-三大范式,多表查询

数据入库时,由于数据设计不合理&#xff0c;会存在数据重复、更新插入异常等情况, 故数据库中表的设计遵循的设计规范&#xff1a;三大范式1.第一范式(1NF)要求数据库的每一列都是不可分割的原子数据项&#xff0c;即原子性。强调的是列的原子性&#xff0c;即数据库中每一列的…...

【杂谈】-递归进化:人工智能的自我改进与监管挑战

递归进化&#xff1a;人工智能的自我改进与监管挑战 文章目录 递归进化&#xff1a;人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管&#xff1f;3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...

springboot 百货中心供应链管理系统小程序

一、前言 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;百货中心供应链管理系统被用户普遍使用&#xff0c;为方…...

Appium+python自动化(十六)- ADB命令

简介 Android 调试桥(adb)是多种用途的工具&#xff0c;该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具&#xff0c;其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利&#xff0c;如安装和调试…...

java 实现excel文件转pdf | 无水印 | 无限制

文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...

STM32+rt-thread判断是否联网

一、根据NETDEV_FLAG_INTERNET_UP位判断 static bool is_conncected(void) {struct netdev *dev RT_NULL;dev netdev_get_first_by_flags(NETDEV_FLAG_INTERNET_UP);if (dev RT_NULL){printf("wait netdev internet up...");return false;}else{printf("loc…...

JVM垃圾回收机制全解析

Java虚拟机&#xff08;JVM&#xff09;中的垃圾收集器&#xff08;Garbage Collector&#xff0c;简称GC&#xff09;是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象&#xff0c;从而释放内存空间&#xff0c;避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...

智能在线客服平台:数字化时代企业连接用户的 AI 中枢

随着互联网技术的飞速发展&#xff0c;消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁&#xff0c;不仅优化了客户体验&#xff0c;还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用&#xff0c;并…...

【2025年】解决Burpsuite抓不到https包的问题

环境&#xff1a;windows11 burpsuite:2025.5 在抓取https网站时&#xff0c;burpsuite抓取不到https数据包&#xff0c;只显示&#xff1a; 解决该问题只需如下三个步骤&#xff1a; 1、浏览器中访问 http://burp 2、下载 CA certificate 证书 3、在设置--隐私与安全--…...

Spring AI 入门:Java 开发者的生成式 AI 实践之路

一、Spring AI 简介 在人工智能技术快速迭代的今天&#xff0c;Spring AI 作为 Spring 生态系统的新生力量&#xff0c;正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务&#xff08;如 OpenAI、Anthropic&#xff09;的无缝对接&…...

【电力电子】基于STM32F103C8T6单片机双极性SPWM逆变(硬件篇)

本项目是基于 STM32F103C8T6 微控制器的 SPWM(正弦脉宽调制)电源模块,能够生成可调频率和幅值的正弦波交流电源输出。该项目适用于逆变器、UPS电源、变频器等应用场景。 供电电源 输入电压采集 上图为本设计的电源电路,图中 D1 为二极管, 其目的是防止正负极电源反接, …...