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

【技术分享】RK356X Android 使用 libgpiod 测试gpio

前言

libgpiod 是用于与 Linux GPIO 字符设备交互的 C 库和工具库;此项目包含六种命令行工具(gpiodetect、gpioinfo、gpioset、gpioget、gpiomon),使用这些工具可以在命令行设置和获取GPIO的状态信息;在程序开发中也可以调用库提供的API接口来控制GPIO。本文内容可适用于RK3566系列开发板 Android11 系统上添加libgpiod库和使用API来测试GPIO。

Purple Pi OH作为一款兼容树莓派的开源主板,采用瑞芯微RK3566 (Cortex-A55) 四核64位超强CPU,主频最高达1.8 GHz,算力高达1Tops,支持INT8/INT16,支持TensorFlow/MXNet/PyTorch/Caffe框架,多路视频输出和输入,支持4K、H.265/H.264视频解码,接口丰富。    

玩法丰富,支持Android 11、Debian 10、OpenHarmony3.2、Ubuntu、麒麟OS等多种系统,提供丰富开源资料。

产品规格书查看深圳触觉智能官网-产品中心

Android 移植 libgpiod 库和测试工具

  1. 下载源码到 external目录下:

cd external
git clone https://github.com/technexion-android/platform_external_libgpiod.git
#git clone https://kernel.googlesource.com/pub/scm/libs/libgpiod/libgpiod

仓库链接:platform_external_libgpiod

  1. 添加到 PRODUCT_PACKAGES

在mk文件中添加编译 libgpiod及工具

PRODUCT_PACKAGES += \RockchipPinnerService \gpioset \gpiomon \gpioinfo \gpioget \gpiofind \gpiodetect \libgpiod

源码

libgpiod-git.7z

命令行工具使用测试

使用gpioget 获取 GPIO0_A6 的电平状态

# gpioget gpiochip0 6
1

程序中调用库的接口使用测试

编写gpiotest.c 实现多组GPIO之间的输入输出对测功能

  • src/tools/gpiotest.h

  • src/tools/gpiotest.c 函数简单说明,#define LEN 45需要修改

#include <stdio.h>
#include <unistd.h>
#include <gpiod.h>
#include "gpiotest.h"#define LEN 45 // GPIO 数组总数,可以用sizeof获取数组大小
#define HIGH 1int main()
{struct gpiod_chip *input_chip, *output_chip;struct gpiod_line *input_line, *output_line;bool output_value, input_value;int ret,test_res = 0, total = 0;for (int num = 0; num < 2; num++ ){int in_chip = 0;int in_line = 1;int out_chip = 2;int out_line = 3;// 反转测试,将原来输出改为输入if ( 1 == num ){in_chip = 2;in_line = 3;out_chip = 0;out_line = 1;}for (int i = 0; i < LEN; i++){// 将 GPIO 配置为 输入input_chip = gpiod_chip_open_by_number(test_gpio[i][in_chip]);if(!input_chip)return -1;input_line = gpiod_chip_get_line(input_chip,test_gpio[i][in_line]);if(!input_line){gpiod_chip_close(input_chip);return -1;}ret = gpiod_line_request_input(input_line,"input");if(ret){gpiod_chip_close(input_chip);return -1;}// 将 GPIO 配置为 输出output_chip = gpiod_chip_open_by_number(test_gpio[i][out_chip]);if(!output_chip)return -1;output_line = gpiod_chip_get_line(output_chip,test_gpio[i][out_line]);if(!output_line){gpiod_chip_close(output_chip);return -1;}ret = gpiod_line_request_output(output_line,"output",HIGH);if(ret){gpiod_chip_close(output_chip);return -1;}test_res = 1;for(int j = 0;j < 2; j++){output_value = gpiod_line_get_value(output_line);//测试拉高、拉低gpiod_line_set_value(output_line, !output_value);//printf("output gpio[%d]: %d\t",i, !output_value);sleep(1);input_value = gpiod_line_get_value(input_line);//printf("input gpio[%d]: %d\n",i, input_value);//用输入 GPIO 验证拉高、拉低if ( output_value != !input_value){printf("test fail array [%d]\n",i);test_res = -1;break;}}if ( 1 == test_res ){printf("PASS gpio array %d\n",i);total += 1;}// release gpiogpiod_chip_close(input_chip);gpiod_chip_close(output_chip);}}printf("total pass gpio number %d\n",total);return 0;
}

程序编译

使用mmm 命令指定目录编译

$ mmm external/libgpiod/

编译完成后,可执行文件产生的路径为out/target/product/rk3566_r/system/bin/gpiotest

将程序push到主板中使用

adb root
adb remount
adb push out/target/product/rk3566_r/system/bin/gpiotest /system/bin
adb shell chmod +x /system/bin/gpiotest

gpiotest 使用

  • 数组第十项测试失败,其余通过,通过gpiotest.h可以找到对应的 GPIO

相关文章:

【技术分享】RK356X Android 使用 libgpiod 测试gpio

前言 libgpiod 是用于与 Linux GPIO 字符设备交互的 C 库和工具库&#xff1b;此项目包含六种命令行工具&#xff08;gpiodetect、gpioinfo、gpioset、gpioget、gpiomon&#xff09;&#xff0c;使用这些工具可以在命令行设置和获取GPIO的状态信息&#xff1b;在程序开发中也可…...

代碼隨想錄算法訓練營|第五十九天|647. 回文子串、7516.最长回文子序列、动态规划总结篇。刷题心得(c++)

目录 讀題 647. 回文子串 看完代码随想录之后的想法 516.最长回文子序列 看完代码随想录之后的想法 647. 回文子串 - 實作 思路 動態規劃思路 雙指針思路 Code 動態規劃思路 雙指針思路 516.最长回文子序列 - 實作 思路 Code 动态规划 - 總結 動態規劃基礎 動…...

Qt封装的Halcon显示控件,支持ROI绘制

前言 目前机器视觉ROI交互控件在C#上做的比较多&#xff0c;而Qt上做的比较少&#xff0c;根据作者 VSQtHalcon——显示图片&#xff0c;实现鼠标缩放、移动图片的文章&#xff0c;我在显示和移动控件的基础上&#xff0c;增加了ROI设置功能&#xff0c;并封装成了一个独立的Q…...

基于深度学的图像修复 图像补全 计算机竞赛

1 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 基于深度学的图像修复 图像补全 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0c;学长非常推荐&#xff01; &#x1f9ff; 更多资料, 项目分享&#xff1a; https://gitee.com/dancheng-se…...

vue3框架全局修改样式(字体颜色以及初始化定义基础elemplent颜色)

问题1、全局修改vue管理系统框架的字体颜色&#xff08;index.scss目录下修改&#xff09; 问题2、vue3中使用elemplent-plus中的el-select组件&#xff0c;默认选中二级或三级的一个数据&#xff0c;没有显示label只显示了id 问题如下 原因是因为 这个属性为true了&#xff0…...

Linux - 进程控制(上篇)- 进程创建 和 进程终止

进程控制 进程创建 对于进程的创建&#xff0c;你肯定知道&#xff0c;在 C/C 当中使用 fork&#xff08;&#xff09;函数&#xff0c;以当前可执行程序生成的进程为 父进程&#xff0c;创建这个父进程的 一个子进程&#xff0c;这个 子进程就是一个新的进程。 如上图所示&a…...

NiceGui:Python中的轻量级GUI框架初体验

目录 一、引言 二、NiceGui概述 三、NiceGui实战&#xff1a;一个简单的计算器应用 四、NiceGui与其他GUI框架的比较 五、注意事项 总结与展望 一、引言 Python作为一门功能强大且易于学习的编程语言&#xff0c;广泛应用于各种领域。在图形用户界面&#xff08;GUI&…...

php 常用的接口和函数

ArrayAccess — interface to provide accessing to objects as arrays 提供以数组形式访问对象的接口。 interface synopsis 接口需要实现下面几个方法 interface ArrayAccess { /* Methods */ public offsetExists(mixed $offset): bool public offsetGet(mixed $offset):…...

【Flutter】Flutter 动画深入解析(2):掌握 AnimatedBuilder 将动画的逻辑和 UI 代码分离

【Flutter】Flutter 动画深入解析(2):掌握 AnimatedBuilder 将动画的逻辑和 UI 代码分离 文章目录 一、前言二、Flutter 动画简介三、什么是 AnimatedBuilder四、AnimatedBuilder 与其他动画小部件的比较五、如何使用 AnimatedBuilder六、实际业务中的应用场景七、完整示例八…...

Spring Boot中解决跨域问题(CORS)

1. 跨域介绍 首先解释什么是跨域&#xff0c;跨域就是前端和后端的端口号不同&#xff1b;会产生跨域问题&#xff0c;这里浏览器的保护机制&#xff08;同源策略&#xff09;。 同源策略&#xff1a;前端和后端的协议、域名、端口号三者都相同叫做同源。 我们看一下不同源&am…...

基于生成对抗网络的照片上色动态算法设计与实现 - 深度学习 opencv python 计算机竞赛

文章目录 1 前言1 课题背景2 GAN(生成对抗网络)2.1 简介2.2 基本原理 3 DeOldify 框架4 First Order Motion Model5 最后 1 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 基于生成对抗网络的照片上色动态算法设计与实现 该项目较为新颖&am…...

广州华锐互动:数字孪生可视化制作软件有哪些亮点?

由广州华锐互动开发的数字孪生可视化制作软件在当今的数字孪生领域中扮演着重要角色&#xff0c;它突破了许多传统数字孪生可视化制作软件的限制。以下是几个方面的突破&#xff1a; 无限自由度&#xff1a;传统的3D建模工具通常有限制编辑器的自由度&#xff0c;使用户难以进行…...

设计模式之工厂模式讲解与案例

工厂模式是一种创建对象的设计模式&#xff0c;它通过提供一个统一的接口来创建对象&#xff0c;隐藏了具体对象的实例化过程。Java中的工厂模式有多种实现方式&#xff0c;下面我将举两个常见的例子。 简单工厂模式&#xff08;Simple Factory Pattern&#xff09;&#xff1a…...

(免费领源码)php#MySQL软件测试文档管理系统28035-计算机毕业设计项目选题推荐

目 录 摘 要 Abstract 第1章 前 言 1.1 研究背景 1.2 开发意义 1.3 系统开发目标 第2章 系统开发环境 6 2.1 HTTP协议 6 2.2 HTML网页技术 6 2.3 B/S结构 6 2.4 PHP脚本语言 7 2.5 MySQL数据库 7 2.6 Apache简介 8 第3章 需求分析 3.1 需求分析 3.2 系统可…...

05.Oracle数据库对象

Oracle数据库对象 Oracle数据库对象是指在Oracle数据库中存储和管理数据的各种实体。以下是一些常见的Oracle数据库对象&#xff1a; 表&#xff08;Table&#xff09;&#xff1a;用于存储数据的基本结构。表由一组列&#xff08;Column&#xff09;组成&#xff0c;每列定义了…...

某国产中间件企业:提升研发安全能力,助力数字化建设安全发展

​某国产中间件企业是我国中间件领导者&#xff0c;国内领先的大安全及行业信息化解决方案提供商&#xff0c;为各个行业领域近万家企业客户提供先进的中间件、信息安全及行业数字化产品、解决方案及服务支撑&#xff0c;致力于构建安全科学的数字世界&#xff0c;帮助客户实现…...

Servlet中主要的内置对象

Servlet中有一些内置对象&#xff0c;它们提供了与 Web 容器和客户端交互的功能。这些对象在开发Servlet时可以直接使用&#xff0c;无需显式创建。 一些主要的内置对象包括&#xff1a; HttpServletRequest&#xff1a;代表客户端的HTTP请求&#xff0c;提供访问请求的内容&am…...

STL-set和map

目录 一、pair和make_pair 1. pair 2. make_pair 二、set &#xff08;一&#xff09;set的模板参数列表 &#xff08;二&#xff09;set的构造 &#xff08;三&#xff09;set的插入 1. 测试1 2. 测试2 &#xff08;四&#xff09;low_bound和upper_bound&#xff…...

【WinForm详细教程四】WinForm中的ProgressBar 、ImageList和ListView控件

文章目录 1.ProgressBar2. ImageList3.ListView控件 1.ProgressBar 用于显示某个操作的进度。 属性&#xff1a; Value: 表示当前进度条的值&#xff0c;其范围由Min和Max决定。Step: 设置每次调用PerformStep()方法时增加的步长。MarqueeAnimationSpeed: 在Style设置为Marq…...

写一个简单实用的Excel工具类

我们在开发中经常要将数据导入成Excel表格供展示&#xff0c;也需要解析Excel中的数据&#xff0c;官方提供的api操作太麻烦&#xff0c;这边封装了一个Excel工具类&#xff0c;可以很轻松的实现Excel的操作 首先加入依赖 <dependencies><!-- EasyPoi 基本库依赖 --…...

基于算法竞赛的c++编程(28)结构体的进阶应用

结构体的嵌套与复杂数据组织 在C中&#xff0c;结构体可以嵌套使用&#xff0c;形成更复杂的数据结构。例如&#xff0c;可以通过嵌套结构体描述多层级数据关系&#xff1a; struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...

【网络】每天掌握一个Linux命令 - iftop

在Linux系统中&#xff0c;iftop是网络管理的得力助手&#xff0c;能实时监控网络流量、连接情况等&#xff0c;帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...

css的定位(position)详解:相对定位 绝对定位 固定定位

在 CSS 中&#xff0c;元素的定位通过 position 属性控制&#xff0c;共有 5 种定位模式&#xff1a;static&#xff08;静态定位&#xff09;、relative&#xff08;相对定位&#xff09;、absolute&#xff08;绝对定位&#xff09;、fixed&#xff08;固定定位&#xff09;和…...

图表类系列各种样式PPT模版分享

图标图表系列PPT模版&#xff0c;柱状图PPT模版&#xff0c;线状图PPT模版&#xff0c;折线图PPT模版&#xff0c;饼状图PPT模版&#xff0c;雷达图PPT模版&#xff0c;树状图PPT模版 图表类系列各种样式PPT模版分享&#xff1a;图表系列PPT模板https://pan.quark.cn/s/20d40aa…...

管理学院权限管理系统开发总结

文章目录 &#x1f393; 管理学院权限管理系统开发总结 - 现代化Web应用实践之路&#x1f4dd; 项目概述&#x1f3d7;️ 技术架构设计后端技术栈前端技术栈 &#x1f4a1; 核心功能特性1. 用户管理模块2. 权限管理系统3. 统计报表功能4. 用户体验优化 &#x1f5c4;️ 数据库设…...

人工智能(大型语言模型 LLMs)对不同学科的影响以及由此产生的新学习方式

今天是关于AI如何在教学中增强学生的学习体验&#xff0c;我把重要信息标红了。人文学科的价值被低估了 ⬇️ 转型与必要性 人工智能正在深刻地改变教育&#xff0c;这并非炒作&#xff0c;而是已经发生的巨大变革。教育机构和教育者不能忽视它&#xff0c;试图简单地禁止学生使…...

GruntJS-前端自动化任务运行器从入门到实战

Grunt 完全指南&#xff1a;从入门到实战 一、Grunt 是什么&#xff1f; Grunt是一个基于 Node.js 的前端自动化任务运行器&#xff0c;主要用于自动化执行项目开发中重复性高的任务&#xff0c;例如文件压缩、代码编译、语法检查、单元测试、文件合并等。通过配置简洁的任务…...

关于uniapp展示PDF的解决方案

在 UniApp 的 H5 环境中使用 pdf-vue3 组件可以实现完整的 PDF 预览功能。以下是详细实现步骤和注意事项&#xff1a; 一、安装依赖 安装 pdf-vue3 和 PDF.js 核心库&#xff1a; npm install pdf-vue3 pdfjs-dist二、基本使用示例 <template><view class"con…...

HubSpot推出与ChatGPT的深度集成引发兴奋与担忧

上周三&#xff0c;HubSpot宣布已构建与ChatGPT的深度集成&#xff0c;这一消息在HubSpot用户和营销技术观察者中引发了极大的兴奋&#xff0c;但同时也存在一些关于数据安全的担忧。 许多网络声音声称&#xff0c;这对SaaS应用程序和人工智能而言是一场范式转变。 但向任何技…...

关于easyexcel动态下拉选问题处理

前些日子突然碰到一个问题&#xff0c;说是客户的导入文件模版想支持部分导入内容的下拉选&#xff0c;于是我就找了easyexcel官网寻找解决方案&#xff0c;并没有找到合适的方案&#xff0c;没办法只能自己动手并分享出来&#xff0c;针对Java生成Excel下拉菜单时因选项过多导…...