Portapack应用开发教程(九)加入喇叭功能

2023-12-12 06:38

本文主要是介绍Portapack应用开发教程(九)加入喇叭功能,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

最近主要在改进portapack硬件,我现在内置电池硬件搞定了,开关也不难,只要改一下外壳就行,接下来的工作就是加入喇叭和麦克风了。

跟一个朋友聊起,原来portapack硬件上是支持喇叭的,只是软件没开。

我找了找资料,在原作的repo里找到个issue

https://github.com/furrtek/portapack-havoc/issues/284

有个老外的评论,推荐去看看这两个代码。

firmware\application\audio.cpp
firmware\common\ak4951.cpp
我看了以后发现觉得基本有戏。

然后我就在audio.cpp里在mute和unmute函数里仿造headphone的disable和enable加入了speaker的disable和enable。

加入的时候要注意,头文件里要实现几个虚函数,这样audio.cpp才能调用到ak4951.cpp里的喇叭相关函数。

否则会提示找不到speaker_enable等函数。至于怎么加入可以参考headphone相关函数。

然后我找了个小喇叭,两线的,两头分别接到3pin喇叭口的外侧两个脚,就有声音了,声音轻的话可以把喇叭贴在外壳上,形成共振(我感觉这个原理就跟人的手捏着天线可以增强接收效果一样)。另外右上角也可以调整音量。

如果充电宝供电,音量不能超过80,音量也不能低于70否则没声音。如果电池供电音量可以到99,但是在90以上会失真。

后来我发现如果一直开着喇叭,耗电挺厉害。

所以我想了个办法,在最上面一栏里加了个图标,用这个图标来控制喇叭是否打开。

这个图标在ui_navigation里加,可以仿照stealth图标。但是要让这个ui_navigation直接操作音频是不可能的。

我又仿造antenna_bias,让他去访问portapack.cpp里的变量和函数,然后portapack.cpp又可以访问到audio.cpp,这样一个完整的链条就实现了。具体做法请看我的github repo。

演示视频:

https://www.bilibili.com/video/BV1tt4y117wM

这篇关于Portapack应用开发教程(九)加入喇叭功能的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/483596

相关文章

springboot使用Scheduling实现动态增删启停定时任务教程

《springboot使用Scheduling实现动态增删启停定时任务教程》:本文主要介绍springboot使用Scheduling实现动态增删启停定时任务教程,具有很好的参考价值,希望对大家有... 目录1、配置定时任务需要的线程池2、创建ScheduledFuture的包装类3、注册定时任务,增加、删

Android使用ImageView.ScaleType实现图片的缩放与裁剪功能

《Android使用ImageView.ScaleType实现图片的缩放与裁剪功能》ImageView是最常用的控件之一,它用于展示各种类型的图片,为了能够根据需求调整图片的显示效果,Android提... 目录什么是 ImageView.ScaleType?FIT_XYFIT_STARTFIT_CENTE

C语言中位操作的实际应用举例

《C语言中位操作的实际应用举例》:本文主要介绍C语言中位操作的实际应用,总结了位操作的使用场景,并指出了需要注意的问题,如可读性、平台依赖性和溢出风险,文中通过代码介绍的非常详细,需要的朋友可以参... 目录1. 嵌入式系统与硬件寄存器操作2. 网络协议解析3. 图像处理与颜色编码4. 高效处理布尔标志集合

Go语言开发实现查询IP信息的MCP服务器

《Go语言开发实现查询IP信息的MCP服务器》随着MCP的快速普及和广泛应用,MCP服务器也层出不穷,本文将详细介绍如何在Go语言中使用go-mcp库来开发一个查询IP信息的MCP... 目录前言mcp-ip-geo 服务器目录结构说明查询 IP 信息功能实现工具实现工具管理查询单个 IP 信息工具的实现服

Python的time模块一些常用功能(各种与时间相关的函数)

《Python的time模块一些常用功能(各种与时间相关的函数)》Python的time模块提供了各种与时间相关的函数,包括获取当前时间、处理时间间隔、执行时间测量等,:本文主要介绍Python的... 目录1. 获取当前时间2. 时间格式化3. 延时执行4. 时间戳运算5. 计算代码执行时间6. 转换为指

如何为Yarn配置国内源的详细教程

《如何为Yarn配置国内源的详细教程》在使用Yarn进行项目开发时,由于网络原因,直接使用官方源可能会导致下载速度慢或连接失败,配置国内源可以显著提高包的下载速度和稳定性,本文将详细介绍如何为Yarn... 目录一、查询当前使用的镜像源二、设置国内源1. 设置为淘宝镜像源2. 设置为其他国内源三、还原为官方

Java中的Lambda表达式及其应用小结

《Java中的Lambda表达式及其应用小结》Java中的Lambda表达式是一项极具创新性的特性,它使得Java代码更加简洁和高效,尤其是在集合操作和并行处理方面,:本文主要介绍Java中的La... 目录前言1. 什么是Lambda表达式?2. Lambda表达式的基本语法例子1:最简单的Lambda表

Android实现两台手机屏幕共享和远程控制功能

《Android实现两台手机屏幕共享和远程控制功能》在远程协助、在线教学、技术支持等多种场景下,实时获得另一部移动设备的屏幕画面,并对其进行操作,具有极高的应用价值,本项目旨在实现两台Android手... 目录一、项目概述二、相关知识2.1 MediaProjection API2.2 Socket 网络

Maven的使用和配置国内源的保姆级教程

《Maven的使用和配置国内源的保姆级教程》Maven是⼀个项目管理工具,基于POM(ProjectObjectModel,项目对象模型)的概念,Maven可以通过一小段描述信息来管理项目的构建,报告... 目录1. 什么是Maven?2.创建⼀个Maven项目3.Maven 核心功能4.使用Maven H

Redis消息队列实现异步秒杀功能

《Redis消息队列实现异步秒杀功能》在高并发场景下,为了提高秒杀业务的性能,可将部分工作交给Redis处理,并通过异步方式执行,Redis提供了多种数据结构来实现消息队列,总结三种,本文详细介绍Re... 目录1 Redis消息队列1.1 List 结构1.2 Pub/Sub 模式1.3 Stream 结