◆蓝牙耳机的工作原理

下面重点讲述下蓝牙耳机的工作原理:

关于音频流的蓝牙传输可以通过两个方式:

1) 通过PCM接口来传送

2)通过模拟UART来传送

下面分别来讲述:

1)通过PCM接口来传送

通过音频播放器eg: Media Player)来打开音频文件,调用Audio驱动,音频文件通过解码后,由PCM输出到Host端蓝牙模块的PCM输入端,接着,经过蓝牙模块的处理后,由RF无线模块发送给Client 端蓝牙设备.

Client 端蓝牙设备经由无线接收模块后,滤波,稳压,经微处理芯片处理后,直接由Speaker播放.

2)通过模拟UART来传送

通过设置注册表HKEY_LOCAL_MACHINE\Services\BTAGSVC】   IsEnabled =1 使得系统引导时自动加载语音网关AG)服务.

首先,通过手动配置建立Host端蓝牙设备与Client端蓝牙设备ACL链接面向无连接的异步链路),接着在Applicaiton或Audio Driver中调用 IOCTL_AG_OPEN_AUDIO,重新建立Host端蓝牙设备与Client端蓝牙设备SCO链接面向连接的同步链路),接着AG自动发送waveOutMessage((HWAVEOUT)i, WODM_BT_SCO_AUDIO_CONTROL, 0, TRUE); 从而建立了Audio至蓝牙芯片之间的通道,也即,实现了音频流到蓝牙模块的传送.

然后,经由主机端蓝牙模块将音频流打包经由RF模块发送出去.

客户端蓝牙耳机接收到无线音频包后,滤波,稳压,经微处理芯片处理后,由PCM传送给音频编解码器芯片,最后,由Speaker播放.

下面这段段码是建立Host端蓝牙设备与Client端蓝牙设备SCO链路

  1. HANDLE h = CreateFile(L"BAG0:",0,0,NULL,OPEN_EXISTING,0,NULL);  
  2.     if (INVALID_HANDLE_VALUE == h) {  
  3.         wprintf(L"Error calling CreateFile on Audio Gateway.\r\n");  
  4.         return 0;  
  5.     }  
  6.  
  7. if (onaudio==1) {  
  8.                 wprintf(L"Opening Bluetooth audio...\n");  
  9.                   
  10.                 BOOL fStatus = DeviceIoControl(h,IOCTL_AG_OPEN_AUDIO,NULL,0,NULL,0,NULL,NULL);  
  11.                 if (FALSE == fStatus) {  
  12.                     wprintf(L"Operation failed: %d.\n", GetLastError());  
  13.                 }  
  14.                 else {  
  15.                     wprintf(L"Operation successful.\n");      
  16.                 }  
  17.               
  18.                 CloseHandle(h);  
  19.                 return 0;  
  20.             }  
  21.             else if (onaudio==0) {  
  22.                 wprintf(L"Closing Bluetooth audio...\n");  
  23.                   
  24.                 BOOL fStatus = DeviceIoControl(h,IOCTL_AG_CLOSE_AUDIO,NULL,0,NULL,0,NULL,NULL);  
  25.                 if (FALSE == fStatus) {  
  26.                     wprintf(L"Operation failed: %d.\n", GetLastError());  
  27.                 }  
  28.                 else {  
  29.                     wprintf(L"Operation successful.\n");      
  30.                 }  
  31.                   
  32.                 CloseHandle(h);  
  33.                 return 0;  
  34.             } 

到这里,相信大家对蓝牙协议栈和语音网关的相关知识都有所掌握了,那么希望本文的总结,对大家能够有所帮助。


相关内容