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. 代码展示
#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. 调试写到最后前言 针对嵌入式开发,有时候通过QT或PAD跨网络对设备设置WIFI,在此记录下,方便后续的查阅。 基础知识点 1.创建和删…...
PostgreSQL 变化数据捕捉(CDC)
PostgreSQL 变化数据捕捉(CDC)基于CDC(变更数据捕捉)的增量数据集成总体步骤:1.捕获源数据库中的更改数据2.将变更的数据转换为您的消费者可以接受的格式3.将数据发布到消费者或目标数据库PostgreSQL支持触发器&#x…...
Spring 事务【隔离级别与传播机制】
Spring 事务【隔离级别与传播机制】🍎一.事务隔离级别🍒1.1 事务特性回顾🍒1.2 事务的隔离级别(5种)🍒1.3 事务隔离级别的设置🍎二.Spring 事务传播机制🍒2.1 Spring 事务传播机制的作用🍒2.2 事…...
HTTP和HTTPS协议
HTTP协议 HTTP协议是一种应用层的协议,全称为超文本传输协议。 URL URL值统一资源定位标志,也就是俗称的网址。 协议方案名 http://表示的就是协议方案名,常用的协议有HTTP协议、HTTPS协议、FTP协议等。HTTPS协议是以HTTP协议为基础&#…...
day3——有关java运算符的笔记
今天主要学习的内容有java的运算符 赋值运算符算数运算符关系运算符逻辑运算符位运算符(专门写一篇笔记)条件运算符运算符的优先级流程控制 赋值运算符 赋值运算符()主要用于给变量赋值,可以跟算数运算符相结合&…...
Git多人协同远程开发
1. 李四(项目负责人)操作步骤 在github中创建远程版本库testgit将基础代码上传⾄testgit远程库远程库中基于main分⽀创建dev分⽀将 githubleaflife/testgit 共享给组员李四继续在基础代码上添加⾃⼰负责的模块内容 2. 张三、王五(组员&…...
Chapter4:机器人仿真
ROS1{\rm ROS1}ROS1的基础及应用,基于古月的课,各位可以去看,基于hawkbot{\rm hawkbot}hawkbot机器人进行实际操作。 ROS{\rm ROS}ROS版本:ROS1{\rm ROS1}ROS1的Melodic{\rm Melodic}Melodic;实际机器人:Ha…...
python(14)--集合
前言 本篇文章学习的是 python 中集合的基础知识。 集合元素的内容是不可变的,常见的元素有整数、浮点数、字符串、元组等。至于可变内容列表、字典、集合等不可以是集合元素。虽然集合不可以是集合的元素,但是集合本身是可变的,可以去增加或…...
【Spark分布式内存计算框架——Spark Core】4. RDD函数(中)Transformation函数、Action函数
3.2 Transformation函数 在Spark中Transformation操作表示将一个RDD通过一系列操作变为另一个RDD的过程,这个操作可能是简单的加减操作,也可能是某个函数或某一系列函数。值得注意的是Transformation操作并不会触发真正的计算,只会建立RDD间…...
Mysql 数据类型
1、数值数据类型 1.1 整数类型(精确值) INTEGER, INT, SMALLINT, TINYINT, MEDIUMINT, BIGINT MySQL支持SQL标准的整数类型INTEGER (或INT)和SMALLINT。作为标准的扩展,MySQL还支持整数类型TINYINT、MEDIUMINT和BIGINT。下表显示了每种整数类型所需的存储和范围。…...
运行Whisper笔记(1)
最近chatGPT很火,就去逛了一下openai的github项目。发现了这个项目。 这个项目可以识别视频中的音频,转换出字幕。 带着一颗好奇的心就尝试自己去部署玩一玩 跟着这篇文章一步步来进行安装,并且跟着这篇文章解决途中遇到的问题。 途中还会遇…...
2023年最强大的12款数据可视化工具,值得收藏
做数据分析也有年头了,好的坏的工具都用过,推荐几个觉得很好用的,避坑必看! PS:一般比较成熟的公司里,数据分析工具不只是满足业务分析和报表制作,像我现在给我们公司选型BI工具,是做…...
LeetCode刷题系列 -- 523. 连续的子数组和
给你一个整数数组 nums 和一个整数 k ,编写一个函数来判断该数组是否含有同时满足下述条件的连续子数组:子数组大小 至少为 2 ,且子数组元素总和为 k 的倍数。如果存在,返回 true ;否则,返回 false 。如果存…...
LeetCode刷题系列 -- 525. 连续数组
给定一个二进制数组 nums , 找到含有相同数量的 0 和 1 的最长连续子数组,并返回该子数组的长度。示例 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.创建自定义拦截器,实现 HandlerInterceptor 接口并重写 preHandle(执行具体方法之前的预处理)方法 1.3.2.将自定义拦…...
centos7.6 设置防火墙
1、查看系统版本 cat /etc/redhat-release2、查看防火墙运行状态 systemctl status firewalld这里可以看到当前是未运行状态(inactive)。 3、关闭开机自启动防火墙 systemctl disable firewalld.service4、启动防火墙并查看状态,系统默认 22 端口是开启的。 sy…...
在线支付系列【22】微信支付实战篇之集成服务商API
有道无术,术尚可求,有术无道,止于术。 文章目录前言1. 环境搭建2. 特约商户进件3. 统一下单总结前言 在上篇文档中,我们做好了接入前准备工作,接下来使用开源框架集成服务商相关API。 一个简单的支付系统完成支付流程…...
3.2 埃尔米特转置
定义 对于复矩阵,转置又不一样,常见的操作是共轭转置,也叫埃尔米特转置Hermitian transpose。埃尔米特转置就是对矩阵先共轭,再转置,一般来说用三种符号表示埃尔米特转置: 第一种符号是AHA^HAH,…...
Python爬虫之Scrapy框架系列(13)——实战ZH小说爬取数据入MySql数据库
目录:1 数据持久化存储,写入Mysql数据库①定义结构化字段:②重新编写爬虫文件:③编写管道文件:④辅助配置(修改settings.py文件):⑤navicat创库建表:⑥ 效果如下…...
MySQL篇02-三大范式,多表查询
数据入库时,由于数据设计不合理,会存在数据重复、更新插入异常等情况, 故数据库中表的设计遵循的设计规范:三大范式1.第一范式(1NF)要求数据库的每一列都是不可分割的原子数据项,即原子性。强调的是列的原子性,即数据库中每一列的…...
零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?
一、核心优势:专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发,是一款收费低廉但功能全面的Windows NAS工具,主打“无学习成本部署” 。与其他NAS软件相比,其优势在于: 无需硬件改造:将任意W…...
SkyWalking 10.2.0 SWCK 配置过程
SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外,K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案,全安装在K8S群集中。 具体可参…...
微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】
微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来,Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...
React第五十七节 Router中RouterProvider使用详解及注意事项
前言 在 React Router v6.4 中,RouterProvider 是一个核心组件,用于提供基于数据路由(data routers)的新型路由方案。 它替代了传统的 <BrowserRouter>,支持更强大的数据加载和操作功能(如 loader 和…...
QMC5883L的驱动
简介 本篇文章的代码已经上传到了github上面,开源代码 作为一个电子罗盘模块,我们可以通过I2C从中获取偏航角yaw,相对于六轴陀螺仪的yaw,qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...
安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件
在选煤厂、化工厂、钢铁厂等过程生产型企业,其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进,需提前预防假检、错检、漏检,推动智慧生产运维系统数据的流动和现场赋能应用。同时,…...
Python实现prophet 理论及参数优化
文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候,写过一篇简单实现,后期随着对该模型的深入研究,本次记录涉及到prophet 的公式以及参数调优,从公式可以更直观…...
使用Spring AI和MCP协议构建图片搜索服务
目录 使用Spring AI和MCP协议构建图片搜索服务 引言 技术栈概览 项目架构设计 架构图 服务端开发 1. 创建Spring Boot项目 2. 实现图片搜索工具 3. 配置传输模式 Stdio模式(本地调用) SSE模式(远程调用) 4. 注册工具提…...
Selenium常用函数介绍
目录 一,元素定位 1.1 cssSeector 1.2 xpath 二,操作测试对象 三,窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四,弹窗 五,等待 六,导航 七,文件上传 …...
MySQL 8.0 事务全面讲解
以下是一个结合两次回答的 MySQL 8.0 事务全面讲解,涵盖了事务的核心概念、操作示例、失败回滚、隔离级别、事务性 DDL 和 XA 事务等内容,并修正了查看隔离级别的命令。 MySQL 8.0 事务全面讲解 一、事务的核心概念(ACID) 事务是…...
