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)要求数据库的每一列都是不可分割的原子数据项,即原子性。强调的是列的原子性,即数据库中每一列的…...
云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?
大家好,欢迎来到《云原生核心技术》系列的第七篇! 在上一篇,我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在,我们就像一个拥有了一块崭新数字土地的农场主,是时…...
rknn优化教程(二)
文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK,开始写第二篇的内容了。这篇博客主要能写一下: 如何给一些三方库按照xmake方式进行封装,供调用如何按…...
线程同步:确保多线程程序的安全与高效!
全文目录: 开篇语前序前言第一部分:线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分:synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分ÿ…...
linux 下常用变更-8
1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行,YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID: YW3…...
unix/linux,sudo,其发展历程详细时间线、由来、历史背景
sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...
USB Over IP专用硬件的5个特点
USB over IP技术通过将USB协议数据封装在标准TCP/IP网络数据包中,从根本上改变了USB连接。这允许客户端通过局域网或广域网远程访问和控制物理连接到服务器的USB设备(如专用硬件设备),从而消除了直接物理连接的需要。USB over IP的…...
安卓基础(aar)
重新设置java21的环境,临时设置 $env:JAVA_HOME "D:\Android Studio\jbr" 查看当前环境变量 JAVA_HOME 的值 echo $env:JAVA_HOME 构建ARR文件 ./gradlew :private-lib:assembleRelease 目录是这样的: MyApp/ ├── app/ …...
Python ROS2【机器人中间件框架】 简介
销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...
GruntJS-前端自动化任务运行器从入门到实战
Grunt 完全指南:从入门到实战 一、Grunt 是什么? Grunt是一个基于 Node.js 的前端自动化任务运行器,主要用于自动化执行项目开发中重复性高的任务,例如文件压缩、代码编译、语法检查、单元测试、文件合并等。通过配置简洁的任务…...
MFC 抛体运动模拟:常见问题解决与界面美化
在 MFC 中开发抛体运动模拟程序时,我们常遇到 轨迹残留、无效刷新、视觉单调、物理逻辑瑕疵 等问题。本文将针对这些痛点,详细解析原因并提供解决方案,同时兼顾界面美化,让模拟效果更专业、更高效。 问题一:历史轨迹与小球残影残留 现象 小球运动后,历史位置的 “残影”…...
