Android13添加AudioControl接口
概述
AudioControl 模块是 Android Automotive 平台的一部分,它提供了对车载音频系统的控制接口。该模块负责管理音频路由、音量调节、音频焦点管理等功能,确保在车载环境中音频体验的流畅性和一致性。AudioControl 模块通常通过硬件抽象层(HAL)实现,与底层音频硬件通信,以执行各种音频操作。
模块架构
AudioControl 模块是基于 Android HAL 的一部分,其架构设计如下:
应用层(Application Layer):车载应用程序通过 CarAudioManager 发起音频请求,例如播放媒体、语音助手等。
框架层(Framework Layer):Android 框架通过 Car Audio Service 接受音...
ubuntu搭建vscode阅读android_car_java环境
ubuntu搭建vscode阅读android_car_java环境
操作环境
Ubuntu-16.04.1
VSCode 1.92.2
插件安装
vscode 安装插件 Extension Pack for Java
环境配置
# 根据实际环境修改源码路径
cd android_code_path
cd packages/services/Car
mkdir mylib
ln -s ./../../../../frameworks mylib/frameworks
mkdir mylib/my_framework_core
mkdir mylib/my_framework_core/android
cd mylib/my_fr...
ubuntu开发环境配置
查看系统版本
lsb_release -a
修改软件源
Ubuntu 默认的软件源是境外的,速度上会有些问题,我们可以在「Software & Updates」(软件和更新)中选择国内的镜像。
还可以直接修改配置文件 https://developer.aliyun.com/mirror/ubuntu?spm=a2c6h.13651102.0.0.775b1b11o2W9u7
更新系统软件
sudo apt update
sudo apt upgrade
sudo apt autoremove
# Ubuntu 18.04
sudo apt install -y openssh-server build-essential...
Linux驱动开发之ALSA驱动设备树
概述
ALSA(Advanced Linux Sound Architecture)是Linux内核中关于音频驱动的框架,它定义了音频驱动的框架,使得音频驱动可以方便地被用户空间调用。
ALSA驱动起始页https://kernel.org/doc/html/latest/sound/index.html
asla驱动代码结构https://kernel.org/doc/html/latest/sound/kernel-api/writing-an-alsa-driver.html
本文主要介绍一下ALSA驱动开发的相关设备树及源文件。
背景
基于正点原子的i.MX6ULL开发板,Linux内核版本 4.1.15
设备树 imx6ull-alientek-emmc.dts...
Linux驱动开发之ALSA驱动platform
概述
ALSA驱动platform
背景
基于正点原子的i.MX6ULL开发板,Linux内核版本 4.1.15
源文件
sound/soc/fsl/fsl_sai.c
static struct snd_soc_dai_driver fsl_sai_dai = {
.probe = fsl_sai_dai_probe,
.playback = {
.stream_name = "CPU-Playback",
.channels_min = 1,
.channels_max = 2,
.rate_min = 8000,
.rate_max = 192000,
...
Linux驱动开发之ALSA驱动mach
概述
ALSA驱动machine
背景
基于正点原子的i.MX6ULL开发板,Linux内核版本 4.1.15
源文件
sound/soc/fsl/imx-wm8960.c
static struct snd_soc_dai_link imx_wm8960_dai[] = {
{
.name = "HiFi",
.stream_name = "HiFi",
.codec_dai_name = "wm8960-hifi",
.ops = &imx_hifi_ops,
},
{
.name = "HiFi-ASRC-FE",
.stream_n...
Linux驱动开发之ALSA驱动codec
概述
ALSA驱动codec
背景
基于正点原子的i.MX6ULL开发板,Linux内核版本 4.1.15
源文件
sound/soc/codecs/wm8960.c
static struct snd_soc_dai_driver wm8960_dai = {
.name = "wm8960-hifi",
.playback = {
.stream_name = "Playback",
.channels_min = 1,
.channels_max = 2,
.rates = WM8960_RATES,
.formats = WM8960_FORMATS,},
...
cmake之函数
函数
添加函数
为每个源文件添加 __FILENAME__ 宏
# utils.cmake
#重新定义当前目标的源文件的 __FILENAME__ 宏
function(redefine_file_macro targetname)
#获取当前目标的所有源文件
get_target_property(source_files "${targetname}" SOURCES)
#遍历源文件
foreach(sourcefile ${source_files})
#获取当前源文件的编译参数
get_property(defs SOURCE "${sourcefile}"
PROPERTY COM...
msys2环境下使用外部mingw64编译器
电脑环境
Windows 10
msys2
QT5.14.2 mingw64(已安装)
步骤
安装 msys2
下载安装包 https://www.msys2.org/
运行安装包,选择安装目录,默认安装即可
配置 msys2
运行 msys2,输入 pacman -Syu 更新软件包
安装常用软件包:pacman -S git zsh vim tree make autoconf automake libtool
安装 mingw64 编译器:pacman -S mingw-w64-x86_64-toolchain
注意:如果要使用外部编...
ubuntu下交叉编译tinyalsa
环境
Ubuntu 20.04.2 LTS
tinyalsa-2.0.0
下载源码
Github https://github.com/tinyalsa/tinyalsa
解压
tar -xvf tinyalsa-2.0.0.tar.bz2
编译源码
添加交叉编译配置
# vim toolchain_arm_linux_gcc.cmake
# 设置C和C++编译器路径
set(CMAKE_C_COMPILER "/usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc")
set(CMAKE_C...
ubuntu下交叉编译alsa-lib和alsa-utils
环境
Ubuntu 20.04.2 LTS
alsa-lib-1.2.2
alsa-utils-1.2.2
下载源码
官网https://www.alsa-project.org
解压
tar -xvf alsa-lib-1.2.2.tar.bz2
tar -xvf alsa-utils-1.2.2.tar.bz2
安装依赖
sudo apt install -y build-essential gcc g++ cmake libxkbcommon-x11-dev libgl1-mesa-dev libglu1-mesa-dev libfontconfig1-dev libmysqlclient-dev l...
ubuntu下编译QT
环境
Ubuntu 20.04.2 LTS
Qt 5.14.2
下载源码
官网https://download.qt.io/archive/qt/
完整路径https://download.qt.io/archive/qt/5.14/5.14.2/single/qt-everywhere-src-5.14.2.tar.xz
解压
# 注意解压路径不要有中文
tar -xvf qt-everywhere-src-5.14.2.tar.xz
安装依赖
sudo apt install -y build-essential gcc g++ cmake libxkbcommon-x11-dev libgl1-mesa-dev lib...
音频调试相关
概述
音频调试是在开发过程中对Android系统中的音频功能进行故障排除和优化的重要步骤。通过调试音频相关的问题,可以确保音频功能的正常运行,并提供更好的用户体验。本文将介绍一些常见的音频调试方法和工具,以及在Android系统中进行音频调试的一般流程。
Android framework
Android framework是Android系统中的一个重要组成部分,它提供了访问音频硬件和实现音频功能的接口和类。在进行音频调试时,可以利用Android framework提供的工具和方法来诊断和解决问题。
更改audioflinger重采样算法精度
void AudioResampler: :init_routine()
if (property_get("af.resampl...
C++11新特性之type_traits
概述
C++11中的type_traits是一个模板元编程库,它提供了一些模板类和模板函数,用于在编译期间进行类型信息的查询和转换。它可以帮助我们编写更加通用和可靠的代码,避免了很多运行时类型检查和转换的开销。
中文官方网址
zh.cppreference
头文件
#include <type_traits>
基本类型特性
以下模板类和函数用于判断基本类型的特性:
模板类/函数
描述
std::is_void
是否为void类型
std::is_integral
是否为整数类型
std...
代码格式化工具clang-format的安装和使用
简介
clang-format是一个由LLVM项目提供的代码格式化工具,可以自动化地格式化C、C++、Objective-C、Java、JavaScript和Protobuf等语言的代码。它可以根据自定义的风格规则,将代码自动格式化成统一的风格,提高代码的可读性和可维护性。
安装
Linux
在Linux系统中,我们可以使用包管理工具来安装clang-format。
在Debian/Ubuntu系统中,可以使用以下命令安装:
sudo apt-get update
sudo apt-get install clang-format
在Fedora系统中,可以使用以下命令安装:
sudo dnf install clang-tools-extra
macOS
在m...
Linux驱动开发之I2C体系
体系概述
I2C(Inter-Integrated Circuit)是一种串行通信协议,用于在芯片之间进行通信。Linux内核支持I2C总线,可以通过I2C总线访问连接到系统的各种设备,如温度传感器、加速度计、数字电压计等。
在Linux内核中,I2C体系由以下几个部分组成:
I2C核心代码:I2C核心提供了I2C总线驱动和设备驱动的注册、注销方法,I2C通信方法(即Algorithm)上层的与具体适配器无关的代码以及探测设备、检测设备地址的上层代码等
I2C总线驱动程序:I2C总线驱动程序负责管理I2C总线的物理层和数据链路层,实现I2C总线的读写操作。I2C总线驱动主要包含I2C适配器数据结构i2c_adapter、I2C适配器的Algor...
Linux驱动开发之输入设备驱动
概述
输入设备(如按键、键盘、触摸屏、鼠标等)是典型的字符设备,其一般的工作机理是底层在按键、触摸等动作发送时产生一个中断(或驱动通过Timer定时查询),然后CPU通过SPI、I2C或外部存储器总线读取键值、坐标等数据,并将它们放入一个缓冲区,字符设备驱动管理该缓冲区,而驱动的read()接口让用户可以读取键值、坐标等数据。
显然,在这些工作中,只是中断、读键值/坐标值是与设备相关的,而输入事件的缓冲区管理以及字符设备驱动的file_operations接口则对输入设备是通用的。基于此,内核设计了输入子系统,由核心层处理公共的工作。Linux内核输入子系统的框架如下图所示。
输入核心提供了底层输入设备驱动程序所需的API,如分配/释放一个输入设备:
struct inpu...
Linux驱动开发之misc设备驱动
概述
misc设备驱动是Linux内核中的一种特殊类型的驱动程序,它用于管理那些没有与特定硬件设备相关联的设备。这些设备通常是由用户空间的应用程序创建和控制的,例如设备文件/dev/null和/dev/random。
miscdevice本质上也是字符设备,只是在miscdevice核心层的misc_init()函数中,通过register_chrdev(MISC_MAJOR,”misc”,&misc_fops)注册了字符设备,而具体miscdevice实例调用misc_register()的时候又自动完成了device_create()、获取动态次设备号的动作。
miscdevice的主设备号是固定的,MISC_MAJOR定义为10,在Linux内核中,大概可以找到20...
Linux驱动开发之设备驱动模型
概述
Linux的设备驱动模型分为总线、设备和驱动三个实体。这三个实体在内核里的职责分别如下:
总线:负责管理设备和驱动,为设备匹配合适的驱动,为驱动匹配合适的设备。
设备:负责提供硬件资源。
驱动:负责使用设备提供的硬件资源。
总线将设备和驱动联系起来,使得它们之间解耦。
优点
Linux驱动程序模型是先前在内核中使用的所有不同驱动程序模型的统一。它旨在通过将一组数据和操作整合到全局可访问的数据结构中,来扩展基于基础总线来桥接设备驱动程序。这样,不同类型的总线之间就可以有一致性。
统一总线模型包括一组所有总线都具有的公共属性和一组公共回调,如总线探测期间的设备发现、总线关闭、总线电源管理等。通用的设备和桥接接口反映了现代计算机的目标:即执行无缝设备“即插即...
Linux驱动开发之定时器
概述
Linux内核中的定时器是一种机制,用于在特定时间间隔内执行某些操作。它是通过内核中的计时器实现的,计时器会在指定的时间间隔内触发一个中断,这个中断用于启动定时器。定时器通常用于处理周期性任务,例如更新屏幕或处理网络流量。
在Linux内核中,有两种类型的定时器:硬件定时器和软件定时器。硬件定时器是由计算机的硬件设备提供的,例如时钟或定时器芯片。而软件定时器则是由内核代码实现的。
要在Linux内核中使用定时器,您需要编写一个处理程序来处理定时器中断。这个处理程序将在定时器触发时自动调用。处理程序应该执行您想要在定时器触发时执行的任务。例如,如果您想要在每秒钟更新屏幕,您可以编写一个处理程序来更新屏幕,并将它与一个每秒钟触发的定时器关联起来。
定时器编程
软件意义上的定...
共计 92 篇文章,5 页。