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

相关文章

Android 悬浮窗开发示例((动态权限请求 | 前台服务和通知 | 悬浮窗创建 )

《Android悬浮窗开发示例((动态权限请求|前台服务和通知|悬浮窗创建)》本文介绍了Android悬浮窗的实现效果,包括动态权限请求、前台服务和通知的使用,悬浮窗权限需要动态申请并引导... 目录一、悬浮窗 动态权限请求1、动态请求权限2、悬浮窗权限说明3、检查动态权限4、申请动态权限5、权限设置完毕后

Ubuntu固定虚拟机ip地址的方法教程

《Ubuntu固定虚拟机ip地址的方法教程》本文详细介绍了如何在Ubuntu虚拟机中固定IP地址,包括检查和编辑`/etc/apt/sources.list`文件、更新网络配置文件以及使用Networ... 1、由于虚拟机网络是桥接,所以ip地址会不停地变化,接下来我们就讲述ip如何固定 2、如果apt安

PyCharm 接入 DeepSeek最新完整教程

《PyCharm接入DeepSeek最新完整教程》文章介绍了DeepSeek-V3模型的性能提升以及如何在PyCharm中接入和使用DeepSeek进行代码开发,本文通过图文并茂的形式给大家介绍的... 目录DeepSeek-V3效果演示创建API Key在PyCharm中下载Continue插件配置Con

Deepseek R1模型本地化部署+API接口调用详细教程(释放AI生产力)

《DeepseekR1模型本地化部署+API接口调用详细教程(释放AI生产力)》本文介绍了本地部署DeepSeekR1模型和通过API调用将其集成到VSCode中的过程,作者详细步骤展示了如何下载和... 目录前言一、deepseek R1模型与chatGPT o1系列模型对比二、本地部署步骤1.安装oll

在不同系统间迁移Python程序的方法与教程

《在不同系统间迁移Python程序的方法与教程》本文介绍了几种将Windows上编写的Python程序迁移到Linux服务器上的方法,包括使用虚拟环境和依赖冻结、容器化技术(如Docker)、使用An... 目录使用虚拟环境和依赖冻结1. 创建虚拟环境2. 冻结依赖使用容器化技术(如 docker)1. 创

Spring Boot整合log4j2日志配置的详细教程

《SpringBoot整合log4j2日志配置的详细教程》:本文主要介绍SpringBoot项目中整合Log4j2日志框架的步骤和配置,包括常用日志框架的比较、配置参数介绍、Log4j2配置详解... 目录前言一、常用日志框架二、配置参数介绍1. 日志级别2. 输出形式3. 日志格式3.1 PatternL

MySQL8.2.0安装教程分享

《MySQL8.2.0安装教程分享》这篇文章详细介绍了如何在Windows系统上安装MySQL数据库软件,包括下载、安装、配置和设置环境变量的步骤... 目录mysql的安装图文1.python访问网址2javascript.点击3.进入Downloads向下滑动4.选择Community Server5.

CentOS系统Maven安装教程分享

《CentOS系统Maven安装教程分享》本文介绍了如何在CentOS系统中安装Maven,并提供了一个简单的实际应用案例,安装Maven需要先安装Java和设置环境变量,Maven可以自动管理项目的... 目录准备工作下载并安装Maven常见问题及解决方法实际应用案例总结Maven是一个流行的项目管理工具

SpringBoot整合DeepSeek实现AI对话功能

《SpringBoot整合DeepSeek实现AI对话功能》本文介绍了如何在SpringBoot项目中整合DeepSeekAPI和本地私有化部署DeepSeekR1模型,通过SpringAI框架简化了... 目录Spring AI版本依赖整合DeepSeek API key整合本地化部署的DeepSeek

Python实现多路视频多窗口播放功能

《Python实现多路视频多窗口播放功能》这篇文章主要为大家详细介绍了Python实现多路视频多窗口播放功能的相关知识,文中的示例代码讲解详细,有需要的小伙伴可以跟随小编一起学习一下... 目录一、python实现多路视频播放功能二、代码实现三、打包代码实现总结一、python实现多路视频播放功能服务端开