Hidl 学习总结 3

目录

1、需求分析

2、接口实现

3、代码编写

4、调试过程中遇到的坑


1、需求分析

        项目中需要监听gpio改变的事件,驱动测上报Input事件,需要在framework添加逻辑通知给app,为了解耦,考虑能够更好的移植,app单独监听该input事件。

2、接口实现

        1、APP注册 callback给 Hidl Service
        2、Hidl Service监听相关文件节点后回调 APP Callback

        参考之前Hidl 学习总结1

3、代码编写

        APP代码编写

package com.example.test2;import androidx.appcompat.app.AppCompatActivity;
import vendor.hardware.test.V1_0.ITest;
import vendor.hardware.test.V1_0.ITestCmdCallback;import android.hidl.base.V1_0.DebugInfo;
import android.os.Bundle;
import android.os.IHwBinder;
import android.os.NativeHandle;
import android.os.RemoteException;import java.util.ArrayList;public class MainActivity extends AppCompatActivity {private TestCmdCallback mCallback;ITest mTest;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);try {mTest = ITest.getService(false);mCallback = new TestCmdCallback();android.util.Log.i("zmao","get services success **** !");int ret = mTest.registCallback(mCallback);android.util.Log.i("zmao","register callback ret = " + ret);} catch(Exception e) {android.util.Log.i("zmao","exception " + e);}}@Overrideprotected void onResume() {super.onResume();}public class TestCmdCallback extends ITestCmdCallback.Stub {public void callback(String rsp) {android.util.Log.i("zmao","TestCmdCallback rsp = " + rsp);}}
}

         Hidl 服务代码编写

void EventObserver::startObserver(void *observer){int fd; /*需要轮询的fds*/fd_set readfds;/*需要轮询的fds数量*/int maxfds;struct input_event event;struct timeval timeout;timeout.tv_sec = 10;timeout.tv_usec = 0;EventCallback* mObserver = (EventCallback*)observer;fd = open("/dev/input/event3", O_RDWR | O_NONBLOCK);if(fd < 0){ALOGE("startObserver error");} else {ALOGE("startObserver success");}//清零FD_ZERO(&readfds);/*将标准输入的文件描述符添加到集合中, 如果是多个添加多个文件描述符*/FD_SET(fd, &readfds);maxfds = fd + 1; //最大文件描述符fd + 1while(1){int ret = select(maxfds, &readfds, NULL, NULL, NULL);if(ret > 0){/*只有发生过的fd才会在文件readfds中*/if(FD_ISSET(fd, &readfds)){while(read(fd, &event, sizeof(event)) == sizeof(event)){ALOGE("get envent: type = 0x%x, Code = 0x%x value = 0x%x \n",event.type, event.code, event.value);//ALOGE("get envent: type = %s, Code = %s value = 0x%x \n",eventTypeToString(event.type), eventCodeToString(event.code), event.value);if(mObserver->mCallback != nullptr){mObserver->mCallback->callback("gpio is change");ALOGE("mCallback is called");}}}//将文件描述符重置FD_ZERO(&readfds);FD_SET(fd, &readfds); } else if (ret == 0){if(FD_ISSET(fd, &readfds)){ALOGE("select time out \n");}} else {ALOGE("poll err \n");}}
}

  关闭Selinux 调试Log 如下

    Line 70180: 04-10 18:38:32.399   443   443 E SELinux : avc:  denied  { find } for interface=vendor.hardware.test::ITest sid=u:r:untrusted_app_32:s0:c238,c256,c512,c768 pid=9203 scontext=u:r:untrusted_app_32:s0:c238,c256,c512,c768 tcontext=u:object_r:default_android_hwservice:s0 tclass=hwservice_manager permissive=1
    Line 70181: 04-10 18:38:32.399   443   443 I auditd  : avc:  denied  { find } for interface=vendor.hardware.test::ITest sid=u:r:untrusted_app_32:s0:c238,c256,c512,c768 pid=9203 scontext=u:r:untrusted_app_32:s0:c238,c256,c512,c768 tcontext=u:object_r:default_android_hwservice:s0 tclass=hwservice_manager permissive=1
    Line 70183: 04-10 18:38:32.400  9203  9203 I android_os_HwBinder: HwBinder: Starting thread pool for getting: vendor.hardware.test@1.0::ITest/default
    Line 70185: 04-10 18:38:32.401  9203  9203 I zmao    : get services success **** !
    Line 70186: 04-10 18:38:32.401 16251 16251 E vendor.hardware.test@1.0-service: zmao registCallback success!
    Line 70186: 04-10 18:38:32.401 16251 16251 E vendor.hardware.test@1.0-service: zmao registCallback success!
    Line 70187: 04-10 18:38:32.401 16251 16251 E vendor.hardware.test@1.0-service: registCallback sucess
    Line 70188: 04-10 18:38:32.402  9203  9203 I zmao    : register callback ret = 0
    Line 115875: 04-10 18:39:00.883 16251 16252 E vendor.hardware.test@1.0-service: get envent: type = 0x1, Code = 0x1 value = 0x1 
    Line 115879: 04-10 18:39:00.884 16251 16252 E vendor.hardware.test@1.0-service: mCallback is called
    Line 115880: 04-10 18:39:00.884 16251 16252 E vendor.hardware.test@1.0-service: get envent: type = 0x1, Code = 0x1 value = 0x0 
    Line 115881: 04-10 18:39:00.884 16251 16252 E vendor.hardware.test@1.0-service: mCallback is called
    Line 115882: 04-10 18:39:00.884 16251 16252 E vendor.hardware.test@1.0-service: get envent: type = 0x0, Code = 0x0 value = 0x0 
    Line 115883: 04-10 18:39:00.885 16251 16252 E vendor.hardware.test@1.0-service: mCallback is called
    Line 115898: 04-10 18:39:00.886  9203 19019 I zmao    : TestCmdCallback rspgpio is change
    Line 115905: 04-10 18:39:00.887  9203 19019 I zmao    : TestCmdCallback rspgpio is change
    Line 115906: 04-10 18:39:00.887  9203 19019 I zmao    : TestCmdCallback rspgpio is change

4、调试过程中遇到的坑

        std:thread的join函数会阻塞主线程,需要使用detach函数。导致服务一直无法获取

5、调试代码下载

hal层示例,AP+service资源-CSDN文库

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/605.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

UUPSUpgradeable部署合约和升级合约

文章目录 写一个合约1. 使用代理部署 并添加拥有者2. 没有name number为103. 使用代理升级部署 填写上面代理的合约地址4. 合约地址没有变&#xff0c;但是添加了name&#xff0c;并且保存了number的属性值 写一个合约 // SPDX-License-Identifier: MIT // Compatible with Op…

《Chain-of-Thought Prompting Elicits Reasoning in Large Language Models》【大模型思维链】

目录 前言一、思维链介绍1-1、指令1-2、逻辑依据1-3、示例 二、Cot一般分类2-1、Zero-Shot-CoT2-2、Few-Shot-CoT 三、Cot的好处&缺陷&适用3-1、Cot的好处3-2、Cot的缺陷3-3、Cot的适用 四、变体4-1、自我验证&#xff08;self-consistency checking&#xff09; 总结 …

freemarker实现代码生成器

这个主要是黑马的ihrm课程中讲的代码生成器的部分内容。 文章目录 应用场景第一个FreeMarker程序&#xff08;数据模板 文件输出&#xff09; 概述数据模型模板的常用标签模板的常用指令 元数据数据库元数据参数元数据结果集元数据 代码生成器思路分析搭建环境导入坐标配置实体…

CloudCompare——体元法计算树冠体积

目录 1.概述2.软件实现3.完整操作4.相关代码 本文由CSDN点云侠原创&#xff0c;CloudCompare——体元法计算树冠体积&#xff0c;爬虫自重。如果你不是在点云侠的博客中看到该文章&#xff0c;那么此处便是不要脸的爬虫与GPT生成的文章。 1.概述 体元法将树冠所在的空间范围划…

python--4函数def,本质、值传递、引用传递、默认值参数、*参数名、**变量、lambda [参数]: 函数、偏函数、递归、递归练习

学习目标&#xff1a; 函数def,本质、值传递、引用传递、默认值参数、*参数名、**变量、lambda [参数]: 函数、偏函数、递归、 递归练习 学习内容&#xff1a; 函数def,本质、值传递、引用传递、默认值参数、*参数名、**变量、lambda [参数]: 函数、偏函数、递归、 递归练习 …

电弧的产生机理

目录&#xff1a; 1、起弧机理 2、电弧特点 3、电弧放电特点 4、实际意义 1&#xff09;电力开关装置 2&#xff09;保险丝 1、起弧机理 电弧的本质是一种气体放电现象&#xff0c;可以理解为绝缘情况下产生的高强度瞬时电流。起弧效果如下图所示&#xff1a; 在电场的…

SpringBoot整合Nacos

文章目录 nacosnacos下载nacos启动nacos相关配置demo-dev.yamldemo-test.yamluser.yaml 代码pom.xmlUserConfigBeanAutoRefreshConfigExampleValueAnnotationExampleDemoApplicationbootstrap.yml测试结果补充.刷新静态配置 nacos nacos下载 下载地址 一键傻瓜试安装即可,官…

【Linux】地址空间虚拟地址

个人主页 &#xff1a; zxctscl 如有转载请先通知 文章目录 1. 虚拟地址1.1 虚拟地址引入1.2 虚拟地址理解1.3 虚拟地址细节问题 2. 地址空间2.1 理解地址空间2.2 页表和写时拷贝 3. 进程调度 1. 虚拟地址 1.1 虚拟地址引入 先先来一个测试代码&#xff1a; 1 #include<st…

微信小程序之点击事件

微信小程序中常用的点击事件主要是 tap&#xff0c;但除此之外还有其他的触摸类事件&#xff0c;用于不同的交互场景。以下是一些常见的点击和触摸相关的事件及其区别&#xff1a; 1、tap——最基本的点击事件&#xff0c;适用于一般的轻触交互&#xff0c;类似于 HTML 中的 c…

tomcat项目部署mysql报错3065

报错&#xff1a; ### SQL: SELECT DISTINCT ct.serial_no AS serial_no FROM xzfy_case_table AS ct WHERE ct.case_status ! ? AND ct.registrant_id ? ORDER BY application_date DESC LIMIT ?, ? ### Cause: java.sql.SQLException: Expression #1 of ORDER BY clause…

每日一练 | 华为认证真题练习Day218

1、IGMPv3不仅支持IGMPv1版本的普遍组查询和IGMPv2版本的特定组查询&#xff0c;还支持IGMPv3版本的指定源/组查询。 A. 对 B. 错 2、关于BGP中network命令的描述&#xff0c;错误的是&#xff1a; A. 通过network注入的路由必须存在于IP路由表中。 B. 注入的路由需要严格匹…

[渗透测试学习] Pov-HackTheBox

Pov-HackTheBox 信息搜集 nmap -sV -sC -v --min-rate 1000 10.10.11.251扫描结果 PORT STATE SERVICE VERSION 80/tcp open tcpwrapped |_http-title: pov.htb | http-methods: |_ Supported Methods: GET HEAD我们将域名pov.htb添加到/etc/hosts方便访问 打开后发…

Octopus+: An RDMA-Enabled Distributed Persistent Memory File System——泛读笔记

TOS 2021 Paper 分布式元数据论文阅读笔记整理 问题 非易失性存储器&#xff08;NVM&#xff09;和远程直接存储器访问&#xff08;RDMA&#xff09;在存储和网络硬件中提供了极高的性能。然而&#xff0c;现有的分布式文件系统隔离了文件系统和网络层&#xff0c;而且分层的…

Python 编程必备技能:解包。简化代码,提高效率

在 Python 中&#xff0c;解包&#xff08;Unpacking&#xff09;是指将一个序列&#xff08;列表、元组等&#xff09;或字典中的元素解开&#xff0c;分别赋值给多个变量的过程。解包可以方便地将序列或字典中的元素分别取出来&#xff0c;用于后续的处理和操作。 在 Python…

Nextjs学习入门 - 创建第一个项目

1 通过npx创建一个nextjs项目 通过命令创建&#xff1a; npx create-next-applatest 得到如下项目结构图&#xff1a; my-app- src //源代码目录- app //引用目录- favicon.ico //网站图标- globals.css //全局css- layout.tsx //布局文件- page.tsx //页面 路径"…

AntD上传文件 结合Axios 服务端由Spring MVC接收

以下将演示&#xff1a;如何使用AntD的上传组件&#xff0c;结合axios工具&#xff0c;向Spring MVC服务端上传文件。 前端发送 基于AntD的上传组件&#xff0c;采用手工上传模式&#xff1b;上传的同时&#xff0c;附加了一个category参数&#xff1b; const [category, setC…

Scikit-Learn 支持向量机分类

Scikit-Learn 支持向量机分类 1、支持向量机&#xff08;SVM&#xff09;1.1、SVM概述1.2、SVM原理1.3、SVM的损失函数 1、支持向量机&#xff08;SVM&#xff09; 1.1、SVM概述 在机器学习中&#xff0c;支持向量机&#xff08;Support Vector Machine&#xff0c;SVM&#x…

华为服务Fellow、首席项目管理专家,华为H5M项目管理标准制定主导者孙虎受邀为PMO大会演讲嘉宾

全国PMO专业人士年度盛会 华为服务Fellow、首席项目管理专家&#xff0c;华为H5M项目管理标准制定主导者孙虎先生受邀为PMO评论主办的2024第十三届中国PMO大会演讲嘉宾&#xff0c;演讲议题为“落地项目管理标准&#xff0c;打赢班长的战争”。大会将于5月25-26日在北京举办&am…

国民经济行业导入数据库码表

目录 1、先去下载word文档图片如下 2、粘贴到excel中形成insert 语句 3、创建临时表存excel中数据 4、创建码表保存信息 5、编写存储过程放入表中 5.1存储第四级码值及父机构 5.2存储第三级码值及父机构 5.3存储第二级码值及父机构 5.4存储第一级码值 6、导入成功查看…

react 使用WEB3.0控件开发包 V3.0接入海康威视摄像头

1、下载官方安装包&#xff1a; 2、安装官方插件 3、引入文件 在public/index 中引入监控依赖&#xff0c;这三个文件可以在下载的官方demo中找到 4、react 中使用 useEffect(() > { const ipInfo :[192.168.xxxx];//初始化摄像头const WebVideoCtrl window.WebVideoCtrl…