动态加载USB Audio Device

    工作中遇到的问题,需要把编译在内核中的USB Audio单独编译为模块,然后在使用过程中动态加载。应用逻辑是,当2.4G空鼠端插入耳机,即发送F1键按键消息,加载usb audio驱动模块,拔出就发送F2,卸载usb audio驱动模块。

    过程比较简单,一共4步:

1、编译模块

    首先在make menuconfig,将USB Audio改为Moudle态。

    

   make moudles,编译模块


2、从sound/usb/MakeFile中了解到我们需要的库是snd-usb-audio.ko和snd-usbmidi-lib.ko

    再逐个检查依赖: 

    modinfo sound/usb/snd-usb-audio.ko 

    depends是空的,说明不需要先加载其他模块,可以直接加载这两个模块

    将这两个模块放到out/target/product/.../system/lib/目录下,准备打包进入system。


3、在init.rc中加入属性控制

on property:sys.audio.load=1
	insmod snd-usb-audio.ko
	insmod snd-usbmidi-lib.ko
on property:sys.audio.load=0
	rmmod snd-usb-audio.ko
	rmmod snd-usbmidi-lib.ko

4、在PhoneWindowManager.java的interceptKeyBeforeDispatching中加入按键处理:

if(KeyEvent.KEYCODE_F1 == event.getKeyCode())
{
	SystemProperties.set("sys.audio.load", "1");
}
else if(KeyEvent.KEYCODE_F2 == event.getKeyCode())
{
	SystemProperties.set("sys.audio.load", "0");
}


这样,动态加载USB Audio Device就实现了。    



  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个基于STM32CubeMX和STM32Cube USB库的示例代码,演示如何将USB配置为HID和音频设备。该示例代码使用STM32F4 Discovery开发板,并将USB配置为一个简单的鼠标HID和一个音频输出设备。 1. 首先,在STM32CubeMX中启用USB功能,并启用HID和音频功能。 2. 然后,将以下代码添加到main.c文件中: ```c #include "usbd_core.h" #include "usbd_desc.h" #include "usbd_hid.h" #include "usbd_audio.h" USBD_HandleTypeDef USBD_Device; int main(void) { HAL_Init(); /* Configure the system clock */ SystemClock_Config(); /* Init Device Library */ USBD_Init(&USBD_Device, &HID_Desc, 0); /* Add Supported Class */ USBD_RegisterClass(&USBD_Device, USBD_HID_CLASS); /* Start Device Process */ USBD_Start(&USBD_Device); /* Start the audio device */ USBD_AUDIO_Init(&USBD_Device); while (1) { /* HID mouse emulation */ USBD_HID_SendReport(&USBD_Device, report_buf, sizeof(report_buf)); /* Audio output */ USBD_AUDIO_Sync(&USBD_Device); } } ``` 3. 在此示例代码中,我们使用了usbd_core.h、usbd_desc.h、usbd_hid.h和usbd_audio.h头文件,这些头文件包含了USB库的相关函数和结构体定义。 4. 我们在main函数中初始化了USB设备,并启用了HID和音频功能。然后,我们使用while循环来模拟鼠标移动和音频输出。 5. 在HID模拟中,我们使用USBD_HID_SendReport函数来发送HID数据报告。在音频输出中,我们使用USBD_AUDIO_Sync函数来同步音频数据。 6. 此外,我们还需要实现一些回调函数,以处理HID和音频数据的传输。例如,在HID接口中,我们需要实现HID_GetReport和HID_SetReport回调函数。在音频接口中,我们需要实现AUDIO_Init和AUDIO_DeInit回调函数。 7. 最后,我们需要在usbd_conf.h文件中配置USB设备的相关参数,例如USB时钟频率、端点数等。 需要注意的是,此示例代码仅供参考,实际的实现可能会有所不同,具体取决于硬件和软件要求。在实现过程中,需要仔细阅读STM32的文档和相关库文档,并进行适当的测试和调试。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值