日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

CSR8670项目实战:BluePager蓝牙寻呼机

發布時間:2024/1/18 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 CSR8670项目实战:BluePager蓝牙寻呼机 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

為了讓CSR867x的開發更容易,現與思度科技聯合推出CSR867x學習板【淘寶鏈接:思度科技CSR開發板】。

技術交流QQ群號:743434463
開發板會員QQ群號:725398389(憑訂單號入群,贈PPT、項目源碼、視頻教程)
——————————正文分割線———————————–

1. 引言

BluePager藍牙尋呼機是一款功能強大的藍牙source設備,可以作為無線對講機的藍牙功能擴充模塊,將無線對講機與藍牙耳機無縫對接。

2. 主要功能

系統框圖如下:

主要功能有:

序號功能項功能描述性能指標
1A2DP播放音樂支持source->sink音樂通過I2S輸入,支持SBC, APTX, APTX-LL48K,立體聲,16bit,8670做I2S slave
2AVRCP控制支持sink端的播放、暫停、音量、上下曲、快進快退等按鍵動作
3HFP語音通話支持source->sink語音通過模擬輸入,sink->source語音通過模擬輸出8K,單聲道,16bit
4支持末碼重播sink設備按下末碼重播鍵,source進入HFP語音通話狀態
5支持撥號語音提示source設備發送撥號->sink設備,sink設備播放撥號提示音
6支持RSSI配對source設備只會同RSSI值大于門限值的sink設備配對
7串口通信支持MCU通過串口控制38400bps,8bit,1停止位,0校驗位,無流控

串口命令交互表

序號名稱傳輸方向格式應答
1讀取sink設備信息MCU->CSR8670AT#state名稱、地址、信號強度、協議、電量、當前解碼格式
2sink設備末碼重播通知CSR8670->MCUNTF#lastnumsink設備按下末碼重播鍵,進入aghfp通話模式
3sink設備avrcp操作通知CSR8670->MCUNTF#avrcpsink設備avrcp命令(透傳avrcp鍵值,參考avc_operation_id定義)
4sink設備連接完成通知CSR8670->MCUNTF#connectedsink設備連接完成
5source設備發起免提通話MCU->CSR8670AT#callscosource設備已啟動免提通話,無需sink按下接聽鍵
6source設備撥號呼叫sink設備MCU->CSR8670AT#outcallsource設備進入撥號狀態,sink設備可聽到0-1-2-3-4-5-6-7-8-9數字
7source設備撥號呼叫本地接聽MCU->CSR8670AT#OUTCALLsource設備本地接聽撥號呼叫,進入免提通話,無需sink按下接聽鍵
8source設備RSSI連接A2DPMCU->CSR8670AT#A2DP RSSI50source設備開始搜索RSSI為-50dBm以下的信號最強的設備,連接A2DP source設備已搜索到目標設備,開始配對
9source設備RSSI連接A2DP+HFPMCU->CSR8670AT#A2DP+HFP RSSI90source設備開始搜索RSSI為-90dBm以下的信號最強的設備,連接A2DP+HFP source設備已搜索到目標設備,開始配對
10source主動斷開連接MCU->CSR8670AT#disconnectsource設備主動斷開連接,進入idle狀態
11sink斷開連接CSR8670->MCUNTF#disconnectsink設備主動斷開連接,source進入idle狀態
12source設備paging連接A2DPMCU->CSR8670AT#A2DP PAGE1c521600045ac7source設備直接page目標藍牙地址的設備,連接A2DP
13source設備paging連接A2DP+HFPMCU->CSR8670AT#A2DP+HFP PAGE1c521600045ac7source設備直接page目標藍牙地址的設備,連接A2DP+HFP

3. 項目難點

此項目的需求的定制化程度很高,在ADK4.1的基礎上做了很多修改。

3.1. 獲取sink電池電量

ADK4.1默認是不能解析電池電量的HFP AT command消息的,需修改source_aghfp_msg_handler.c的代碼,方法如下:

/* indication of unrecognised AT command */ case AGHFP_UNRECOGNISED_AT_CMD_IND: {AGHFP_MSG_DEBUG(("AGHFP_UNRECOGNISED_AT_CMD_IND:\n")); len = ((AGHFP_UNRECOGNISED_AT_CMD_IND_T *)message)->size_data;c = ((AGHFP_UNRECOGNISED_AT_CMD_IND_T *)message)->data; #if 0 AGHFP_MSG_DEBUG(("unrecognised at cmd size %d:\n", len)); for (i = 0; i < len; i++){putchar(*(c+i)); }printf("\n"); #endif/* AT+IPHONEACCEV=2,1,8,2,0\r */if (len == 25){if ((c[0] == 'A') && (c[1] == 'T') && (c[2] == '+') && (c[3] == 'I')&& (c[4] == 'P') && (c[5] == 'H') && (c[6] == 'O') && (c[7] == 'N')&& (c[8] == 'E') && (c[9] == 'A') && (c[10] == 'C') && (c[11] == 'C')&& (c[12] == 'E') && (c[13] == 'V') && (c[14] == '=')){bluetest_update_device_bat((c[19]-'0'));AghfpSendOk(((AGHFP_RESPONSE_HOLD_STATUS_REQUEST_IND_T *)message)->aghfp);}else{AghfpSendError(((AGHFP_UNRECOGNISED_AT_CMD_IND_T *)message)->aghfp); }}else{AghfpSendError(((AGHFP_UNRECOGNISED_AT_CMD_IND_T *)message)->aghfp); } } return;

3.2. AGHFP模式使能AUX in/out

參考CSR8670項目實戰:BlueCar藍牙音頻網關。

3.3. 獲取sink設備的RSSI值和名稱

ADK4.1的source工程在默認狀態下沒有使能inquiry_eir_mode,不能在搜索狀態下獲取sink設備的RSSI值和名稱。

獲取RSSI值的代碼修改方式如下:

/* connection_msg_handler in source_connection_msg_handler.c */if (((CL_INIT_CFM_T *)message)->version == bluetooth2_1) {/* EIR inquiry mode */ConnectionWriteInquiryMode(&theSource->connectionTask, inquiry_mode_eir); } else {/* EIR inquiry mode */ConnectionWriteInquiryMode(&theSource->connectionTask, inquiry_mode_eir); }

獲取設備名稱的代碼修改方式:

/* inquiry_parse_eir_data in source_inquiry.c */else if ((*(p+1) == EIR_TYPE_REMOTE_NAME_SHORTENED) || (*(p+1) == EIR_TYPE_REMOTE_NAME_COMPLETE)) {result.device_name_size = *p;INQUIRY_DEBUG(("device_name_size: %d\n", result.device_name_size));if (result.device_name_size > (REMOTE_DEVICE_NAME_MAX_SIZE-1)){result.device_name_size = REMOTE_DEVICE_NAME_MAX_SIZE-1;}memcpy(result.device_name_buf, (const uint8 *)(p+2), result.device_name_size);result.device_name_buf[result.device_name_size] = '\0';bluetest_update_device_name(result.device_name_buf, (result.device_name_size+1));INQUIRY_DEBUG(("device_name: %s\n", result.device_name_buf)); }

4. 總結

通過此項目對source模式的深度定制開發,發現CSR的ADK有很強的可塑性和靈活性,并且隱藏著驚人的潛能。

在BluePager的基礎上,可以進一步拓展功能。如支持更多輸入源(USB, SPDIF等)、一拖二尋呼等。

總結

以上是生活随笔為你收集整理的CSR8670项目实战:BluePager蓝牙寻呼机的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。