自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

lkdom

这个问题得加钱,把钱都给我,我帮你搞定它

  • 博客(77)
  • 资源 (1)
  • 收藏
  • 关注

原创 es8316调试

因为我使用的是sdo1所以顺序应该是,如果这个顺序不对播放的时候是没声音的。平台:android11。

2023-10-09 16:24:45 556 1

原创 触摸TP,gt9xx调试分享

板子:rk3568平台:android11。

2023-10-04 15:38:38 508

原创 Audio框架简单分析

播放声音可以使用 MediaPlayer 和 AudioTrack,两者都提供 Java API 给应用开发者使用。两者的差别在于:MediaPlayer 可以播放多种格式的音源,如 mp3、flac、wma、ogg、wav 等,而 AudioTrack 只能播放解码后的 PCM 数据流。从上面 Android 音频系统架构图来看:MediaPlayer 在 Native 层会创建对应的音频解码器和一个 AudioTrack,解码后的数据交由 AudioTrack 输出。

2023-06-01 13:22:54 729

原创 取消双击按键启动相机

从日志中我们可以提取到"GestureLauncherService: Power button double tap gesture detected, launching camera. Interval=210ms"这样一条信息,然后我们可以去framework中找到这个"Power button double tap"打印的位置,

2023-04-30 12:51:50 310 2

原创 TP调试记录

显示分辨率偏小,本身是1280x800,识别成了1280x720,所以去掉过滤分辨率文件resolution_white.xml恢复正常,也可以在resolution_white.xml中添加,如下。主要添加了swap_x_y函数,这里上报的位置并不是屏幕物理尺寸的实际位置,需要转换,同getevent -p命令可以看到触摸屏幕的注册信息,在set_abs函数中有相应的注册信息。从插入USB TP的日志上可以看到范围是1280x2048,但是实际上是1280x800。

2023-04-26 19:13:27 328 1

原创 HDMI根据屏幕修改旋转方向和屏幕密度

frameworks/native / services/surfaceflinger/SurfaceFlingerProperties.cpp中的SurfaceFlingerProperties::primary_display_orientation_values primary_display_orientation函数。添加了read_eeprom_rotation函数,在该函数中去读取eeprom中存储的屏幕尺寸信息,根据返回类型来决定屏幕的方向。

2023-04-17 16:35:30 362

原创 去掉不用的系统APP

过滤掉字串“TEXT”中所有符合模式“PATTERN”的单词,保留所有不符合此模式的单词。存在多个模式时,模式表达式之间使用空格分割。“filter-out”函数也可以用来去除一个变量中的某些字符串(实现和“filter”函数相反)。直接将编译Camer2的Android.mk去掉,然后编译烧录到板子就可以了。空格分割的“TEXT”字串中所有不符合模式“PATTERN”的字串。我这里是要去掉camera app,然后编译烧录到板子就OK了,第二种方式就是直接干掉编译该app的.mk文件或者.bp文件。

2023-04-03 17:29:58 146

原创 Android编译自己的程序到/system/bin

背景#有时候我们想创建一个程序,放在系统中,供其他APP执行。我们知道,在生成system.img的时候,编译系统会将out/target/product/[product]/system/bin目录打包进去。所以,我们想办法让编译系统在编译的过程中,把我们的程序编译了,并把编译生成的二进制文件自动放到out/target/product/[product]/system/bin。做法#假如我们要创建一个mytest的程序。

2023-03-07 15:32:24 1141

原创 Android编译错误MODULE.TARGET.EXECUTABLES.eepromtool already defined

device/rockchip/rk356x/目录下的ipc_rk66_tms是我拷贝的IBOX66,两个文件夹的内容确实是一样,所以为了不编译这个IBO66里面的内容,就把这里面的Android.mk直接干掉就可以了。在添加新产品后编译的时候出现如下错误;

2023-02-14 13:10:08 454

原创 耳机插入检测

可以看到拔插使用了switch_dev_register函数去把自己注册在switch这个子类中,并且根据headset->sdev.name = "h2w"指定了名字是h2w,最后在系统中在/sys/class/switch/h2w下,而h2w的state就是耳机插入状态值,如下是分别是拔插卡耳机的log和state值。使用uevent,上报同步extcon事件,会更新/sys/class/extcon/xxx/state节点的值;不过文件系统下的extcon节点是可以根据插拔改变state值的。

2023-02-08 17:35:30 1318

原创 OV5648调试分享(mipi camera)

板子:rk3568平台:android11。

2023-02-08 17:16:58 2283

原创 memcpy和strcpy,sizeof和strlen

4、strlen求的长度是以’\0’结束的。strlen(a)的结果是不定的,而sizeof(a)=30;对于strlen来说也是不定的,而sizeof却是30.strlen()是计算字符串长度的函数,将返回从字符串首到’\0’之间总共的字符个数,原型为:extern unsigned int strlen(char *s);而strlen(&s[3])的结果是4,注意这里是“&s[3]”是从第三个字符所在的地址开始计算长度。3、sizeof求的是分配过来的长度,而strlen求的却是实际使用的长度。

2023-02-07 15:59:53 572

原创 android添加自启动程序

然后整体编译烧录或者使用mm命令push到板子上就可以了。

2023-02-07 15:54:08 398

原创 hal层修改屏幕亮度

系统:Android11。

2023-01-04 09:11:36 531 3

原创 rk3288上ap6212自定义wifi的mac地址

【代码】rk3288上ap6212自定义wifi的mac地址。

2022-12-22 20:01:46 640 2

原创 坑爹的jack-server

平台:rk3288安卓版本:android7.1记录一次jack-server编译踩坑之路,期间本人改端口,重装java-8-openjdk-amd64 ,反正各种尝试搞了一周,人都给整郁闷了,网上各种方法都尝试遍了甚至重装了系统。

2022-11-04 17:48:03 1181 6

原创 进程之间的通信之信号量

如果它的值为零,就挂起该进程的执行(申请资源)v(sv):如果有其他进程因等待sv而被挂起,就让它恢复运行,如果没有进程因等待sv而挂起,就给它加1.(释放资源)信号量本身并不具备数据交换的功能,它本质只是一个数据操作锁,是通过控制临界资源来实现进程间通信的,它在此过程中实现数据的同步与互斥等功能。IPC_SET设置信号量集的数据结构semid_ds中的元素ipc_perm,其值取自semun中的buf参数。GETVAL把semval中的当前值作为函数的返回,即现有的资源数,返回值为非负数。

2022-10-22 10:04:59 435

原创 gcc编译介绍

1. 编译步骤编译步骤:预处理,编译,汇编,链接1.预编译:gcc -E hello.c -o hello.i2.编译:gcc -S hello.i -o hello.s3.汇编:gcc -c hello.s -o hello.o4.链接:gcc hello.o -o hello -o是指定生成文件的的文件名1.1 预处理首先预处理是展开代码中所有的宏定义,展开代码中使用到的头文件,替换代码中所有的条件编译,删除代码中所有的注释、空行、空白。1.2 编译编译是检查代码中语法规范,这一阶段

2022-10-01 15:52:46 512

原创 动态库和静态库

其中 -L 指定库的存储路径, -l 指定库的名称(不需要前面的‘lib’和扩展名‘.so’),如果在库的存储路径有同名的共享库和静态库,gcc 默认使用共享库生成之后,直接执行 main 程序,发现出错,原因是系统加载共享库时,找不到对应的共享库文件”libfoo.so”, 但是该库确实在当前目录下存在。(静态库和动态库最本质的区别就是:该库是否被编译进目标(程序)内部)libadd.a是库的名字(不提前缀和后缀),add.o 是要打包到静态库中的.o文件,.o文件里头就是我们编译好的方法。

2022-09-30 11:42:28 329

原创 c++中的noexcept 关键字

noexcept修饰的函数通过std::terminate的调用来结束程序的执行的方式可能无法保证对象的析构函数的正常调用,无法保证栈的自动释放等noexcept更大的作用是保证应用程序的安全。如果在运行时,noexecpt函数向外抛出了异常(如果函数内部捕捉了异常并完成处理,这种情况不算抛出异常),程序会直接终止,调用std::terminate()函数,该函数内部会调用std::abort()终止程序。这里,fun函数是否是一个noexcept的函数,将由T()表达式是否会抛出异常所决定。

2022-09-24 16:19:07 1642

原创 时间推送练习

同一个数轴X上有两个点的集合A={A1, A2, …, Am}和B={B1, B2, …, Bn},Ai和Bj均为正整数,A、B已经按照从小到大排好序,A、B均不为空,给定一个距离R(正整数),列出同时满足如下条件的所有(Ai, Bj)数对…示例1 输入输出示例仅供调试,后台判题数据一般不包含示例。每组数对输出一行Ai和Bj,以空格隔开。第二行m个正整数,表示集合A。第三行n个正整数,表示集合B。第一行三个正整数m,n,R。

2022-09-24 09:16:32 381

原创 C++算术仿函数

仿函数就是仿造的函数,它并不是一个真正意义上的函数。它是一个类中的运算符()重载,但它具有函数的功能;算术仿函数为了不重复造轮子,C++提供了一套算术仿函数;

2022-09-22 20:34:59 373

原创 插入排序练习

给定你一个长度为n的整数数列。请你用插入排序对这个数列从小到大进行排序。并将拍好的数列按顺序输出。第二行包含n个整数(所有整数均在1-10的9次方范围内),表示这个数列。共输出一行,包含n个整数,表示排好的整数列。共输入两行,第一行包含整数n。

2022-09-21 16:24:25 328

原创 选择排序练习

给定你一个长度为n的整数数列。请你用选择排序对这个数列从小到大进行排序。并将拍好的数列按顺序输出。第二行包含n个整数(所有整数均在1-10的9次方范围内),表示这个数列。共输出一行,包含n个整数,表示排好的整数列。共输入两行,第一行包含整数n。

2022-09-21 13:27:16 152

原创 C++中的lambda表达式(匿名函数)

lambda表达式是C++11中引入的一项新技术,利用lambda表达式可以编写内嵌的匿名函数,用以替换独立函数或者函数对象,并且使代码更可读.从广义上说,lambda表达式产生的是函数对象。而没有捕获任何外部变量的 lambda 表达式则不存在这个问题,这也解释为何按值捕获无法修改捕获的外部变量,lambda 表达式的 operator() 默认是 const 的。在捕获的一瞬间,a 的值就已经被复制到f中了。这里需要注意的是[&]是捕获所有变量这里是按引用的方式来捕获的,而[=]是按照值捕获的。

2022-09-15 15:28:55 1347 1

原创 C++中的map/multimap容器

map中所有元素都是pai对组,pair中的第一个元素是key(键值),起到索引作用,第二个元素为value(实际值),并且map中的所有元素都会根据元素的键值自动排序,map/multimap本质上是一个关联式容器,底层结构是用二叉树实现的。map/multimap具有使用key值快速查找到value值的有点,map与multimap的区别是前者不允许容器中有重复的key值元素,后者则恰恰相反它允许容器中有重复的key值元素。如果存在返回该键值所对应元素的迭代器,如果不存在返回end迭代器;

2022-09-14 17:30:28 1082

原创 C++中的deque容器

deque容器属于双端数组,可以队它的头部和尾部进行插入数据的操作,在我们是使用vector的时候,对于头部的插入删除效率很低,当数据量很大的时候,这一点就表现得越发的明显,而相对而言deque对头部的插入删除速度就比vector快很多,但是vector访问元素的速度会比deque访问元素的速度快很多,这和他们的内部实现有关系.下图就很好展现了deque的特性。删除 [first,last] 之间的元素:dq.erase(iterator first, iterator last);deque 删除元素。

2022-09-13 11:34:49 363

原创 C++中的queue容器

queue是一种先进先出的数据结构,它只允许从一端插入元素,从另一端弹出元素,这两个过程被称为入队和出队,就像我们到火车站卖票窗口买票一样,只能排在队伍后面,队伍最前面的人买了从队伍最前面离开,新来买票的只能排在队伍最后面直到前面的人都离开了队伍才能轮到他。

2022-09-12 10:48:39 730

原创 c++中的pair对组

功能描述:成对出现的数据,利用对组可以返回两个两个数据。访问两个元素(通过first和second)

2022-09-11 19:45:10 340

原创 C++中set/multiset容器

set/multiset容器是一个可以自动排序的容器,所有所有元素都会在插入时自动被排序,set/multiset属于关联式容器,底层结构是用二叉树实现的;这连个也有一定的区别,set不允许容器中有重复的元素,所以在插入值相同元素的时候就会被舍弃掉,而multiset允许容器中有重复的元素。下面是set容器中常见的方法。

2022-09-11 15:23:10 918

原创 c++的list容器

举个例子,如果要访问 list 容器中的第 6 个元素,它不支持容器对象名[6]这种语法格式,正确的做法是从容器中第一个元素或最后一个元素开始遍历容器,直到找到该位置。如图所示,list 容器中各个元素的前后顺序是靠指针来维系的,每个元素都配备了 2 个指针,分别指向它的前一个元素和后一个元素。C++中的list 容器,又称双向链表容器,即该容器的底层是以双向链表的形式实现的。这意味着,list 容器中的元素可以分散存储在内存空间里,而不是必须存储在一整块连续的内存空间中。也可以指定初始化元素。

2022-09-10 21:38:08 370

原创 二叉树实现(创建,遍历)

二叉树(Binary tree)是树形结构的一个重要类型。许多实际问题抽象出来的数据结构往往是二叉树形式,即使是一般的树也能简单地转换为二叉树,而且二叉树的存储结构及其算法都较为简单,因此二叉树显得特别重要。二叉树特点是每个节点最多只能有两棵子树,且有左右之分 [1]。二叉树是n个有限元素的集合,该集合或者为空、或者由一个称为根(root)的元素及两个不相交的、被分别称为左子树和右子树的二叉树组成,是有序树。当集合为空时,称该二叉树为空二叉树。在二叉树中,一个元素也称作一个节。

2022-09-10 17:06:29 458

原创 小艺口红问题

第一行输入整数n,q。(1

2022-09-09 19:10:22 291

原创 快速排序练习题

给定你一个长度为n的整数数列。请你用快速排序对这个数列从小到大进行排序。并将拍好的数列按顺序输出。第二行包含n个整数(所有整数均在1-10的9次方范围内),表示这个数列。共输出一行,包含n个整数,表示排好的整数列。共输入两行,第一行包含整数n。

2022-09-09 17:54:46 446

原创 前缀和练习题

输入一个长为n的整数序列,接下来再输入m个提问,每个询问输入一对了l,r;对于每个询问,输出序列中从第l个数到第r个数的和;接下来输入m行,每行包含两个整数l和r,表示一个询问的区间范围。-1000 ≤ 数列中元素的值 ≤ 1000.第二行包含n个整数,表示整数数列。共m行,每行输出一个询问的处理。第一行包两个整数n和m,

2022-09-09 17:28:34 171

原创 shell脚本字符串玩法

shell脚本字符串玩法。

2022-09-07 17:14:21 314

原创 从单片到Linux驱动

之前做的是单片机板块的,并且长达三年之久,刚毕业本来就想找linux驱动方面的额工作的,奈何了解的不深,没什么工作经验,基础不是很扎实,所以在这期间也浪费了不少时间,还好没有忘记初衷,最后用了一年的时间,因为平时工作比较忙,所以就只能利用周末的时间看视频学习,平时就翻翻有关kernel和uboot的文章来加强这方面的认识这里我是花了钱买了一块正点原子的阿尔法板子回来跟着视频学习,正点原子的资料也是开源的可以去开源电子网,跟着做了一遍,最主要是形成一个驱动的概念,这种区别与以前的单片机中驱动的概念。.....

2022-08-28 16:23:05 324

原创 安卓源码中添加can工具

这里的LOCAL_MODULE就是指定生成的MODULE,编译后就被拷贝到源码顶层目录out/target/product/rk66_tms/system/bin/下面。然后可以通过adb push命令将命令push到启动后的板子上,然后就可以在adb shell终端上使用该命令了。这上面的candump和cansend都是can-utils目录下的Android.mk文件中LOCAL_MODULE指定的,添加修改并编译后将镜像烧录到板子上就可以使用这些命令了.板子是rk356的,系统是安卓11版本的。..

2022-08-28 10:38:05 823

原创 C++模板

模板是 C++ 中的泛型编程的基础。作为强类型语言,C++ 要求所有变量都具有特定类型,由程序员显式声明或编译器推断。但是,无论它们运行哪种类型,许多数据结构和算法看起来都相同。使用模板可以定义类或函数的操作,并让用户指定这些操作应处理的具体类型。...

2022-08-26 11:34:41 37

原创 makefile之wildcard

这样我们就可以得到在当前目录可生成的.o文件列表。展开为已经存在的、使用空格分开的、匹配此模式的所有文件列表。假如不存在任何符合此模式的文件,函数会忽略模式字符并返回空。

2022-08-20 15:26:49 3637 5

4G模块ril库文件,3.391

4G模块ril库文件

2023-07-10

记录ov5648代码驱动

5648

2023-06-14

EDID编辑工具(windows)

EDID编辑工具(windows)

2023-03-31

usb 跟单片机通信控制背光

usb 跟单片机通信控制背光

2023-03-27

vim mokai配色方案

vim mokai配色方案

2022-11-21

i2c读写工具资源压缩包

i2c读写工具资源压缩包

2022-11-11

安卓audio介绍文档

安卓audio介绍

2022-11-11

上传一个can收发工具

can收发工具

2022-08-26

android投屏工具

安装命令:sudo snap install scrcpy_302.snap --dangerous 完成后就可以使用scrcpy命令进行投屏了

2022-07-19

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除