在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁(yè) > 汽車(chē)電子 > 設(shè)計(jì)應(yīng)用 > 基于Realtek“RTL8753BFR 車(chē)載藍(lán)牙棒”開(kāi)發(fā)的音訊連接器設(shè)計(jì)

            基于Realtek“RTL8753BFR 車(chē)載藍(lán)牙棒”開(kāi)發(fā)的音訊連接器設(shè)計(jì)

            作者: 時(shí)間:2022-08-19 來(lái)源:大聯(lián)大 收藏

            一、前言

            本文引用地址:http://www.biyoush.com/article/202208/437516.htm

            隨著藍(lán)牙技術(shù)的普及,越來(lái)越多的舊設(shè)備早期因無(wú)藍(lán)牙功能而造成無(wú)法及時(shí)享用時(shí)下日益便捷的藍(lán)牙共享功能,因此采用目前流行的“無(wú)線藍(lán)牙棒”的方式接入藍(lán)牙是一個(gè)不錯(cuò)的解決方案選擇,我們開(kāi)發(fā)的藍(lán)牙棒就是一個(gè)為沒(méi)有藍(lán)牙功能的計(jì)算機(jī)或車(chē)載設(shè)備提供一個(gè)功能的設(shè)備,打開(kāi)它,連接到汽車(chē)或電腦上,再打開(kāi)移動(dòng)藍(lán)牙設(shè)備搜索移動(dòng)藍(lán)牙設(shè)備->配對(duì),配對(duì)成功就可以使用了 ,它其實(shí)是一個(gè)藍(lán)牙轉(zhuǎn)換器的裝置。其詳細(xì)的使用方法如下:

            首先將它的USB端插入手機(jī)充電器的USB插口給其供電,另一3.5插頭插入音響音頻輸入端,如果輸入端是蓮花插座,應(yīng)該找一條3.5轉(zhuǎn)蓮花插頭音頻線連接,然后打開(kāi)音響,按照下列步驟操作:

            1、首先先打開(kāi)音響,然后再打開(kāi)手機(jī)。

            2、在手機(jī)的設(shè)置中,打開(kāi)藍(lán)牙功能。

            3、這時(shí)手機(jī)會(huì)自動(dòng)搜尋周?chē){(lán)牙設(shè)備。

            4、如果沒(méi)有搜尋到你的藍(lán)牙音響設(shè)備,請(qǐng)繼續(xù)再點(diǎn)擊搜索,如果已經(jīng)搜索到了你的藍(lán)牙轉(zhuǎn)換器,手機(jī)便自動(dòng)連接,并顯示配對(duì)成功。

            5、如果配對(duì)成功,音響便“咕咚”的一聲,表示配對(duì)成功。

            6、這時(shí)用手機(jī)就可以播放所儲(chǔ)存的音樂(lè),也可以聯(lián)網(wǎng)進(jìn)行音樂(lè)播放,并且可以控制藍(lán)牙音響音量大小。

            為了實(shí)現(xiàn)上述的功能,我們采用在業(yè)內(nèi)深耕多年長(zhǎng)期占據(jù)市場(chǎng)領(lǐng)先地位的 半導(dǎo)體的藍(lán)牙科技技術(shù),其強(qiáng)大的音頻計(jì)算處理及高保真的音頻效果讓廣大用戶愛(ài)不釋手。 螃蟹也是業(yè)內(nèi)資深玩家的不二選擇。RTL8753B是REALTEK瑞昱首款完整的TWS真無(wú)線藍(lán)牙耳機(jī)一體化方案,支持藍(lán)牙5.1,主從雙發(fā),無(wú)縫切換。無(wú)線對(duì)藍(lán)牙棒,支持無(wú)線通話、HFP1.7、HSP1.2、A2DP1.3、AVRCP1.6、SPP1.2、PBAP1.0等多種工作模式。具有雙耳通話功能。它還內(nèi)置了鋰電池充電管理,內(nèi)置過(guò)壓、過(guò)流、欠壓保護(hù)等電池防護(hù)裝置。在擴(kuò)展性方面,支持三路LED驅(qū)動(dòng),支持觸摸IC控制,支持模擬和數(shù)字麥克風(fēng)輸入,并且支持雙麥克風(fēng)。在降噪方面,支持降噪功能和環(huán)境音監(jiān)聽(tīng)模式,可以說(shuō)是一款高性能的全能的TWS真無(wú)線藍(lán)牙耳機(jī)一體化方案。現(xiàn)在用這款新推出的芯片來(lái)設(shè)計(jì)一款藍(lán)牙棒可以說(shuō)是非常合適的選擇,不僅開(kāi)發(fā)簡(jiǎn)單快捷,而且成本功耗都非常的滿足日益飛速增長(zhǎng)的市場(chǎng)需求。資深人士的保守估計(jì),“藍(lán)牙棒”市場(chǎng)近年可達(dá)千億市場(chǎng)規(guī)模,未來(lái)的競(jìng)爭(zhēng)可謂百花齊放。采用瑞昱RTL8753BFE主控芯片,支持藍(lán)牙5.1版本。工作距離大于15米,可隔墻穿透連接,確保永不掉線。功耗5mA,超長(zhǎng)待機(jī),支持200天的待機(jī)時(shí)長(zhǎng)。

            二、系統(tǒng)設(shè)計(jì)

            系統(tǒng)設(shè)計(jì)包括兩大部分:硬體及軟體設(shè)計(jì),下面分別闡述:

            1、硬件設(shè)計(jì)

            A) 電源設(shè)計(jì)

            RTL8753BFE RWS芯片支持兩種電源輸入,一種鋰電池(VBAT:2.8-4.5V),一種電源適配器主要給鋰電池充電( 4.5V – 6.5V),其充電電流可達(dá) 400mA,其芯片內(nèi)置充電保護(hù)功能和外接環(huán)境保護(hù)檢測(cè)功能,因此非常適合usb充電方式。芯片內(nèi)部有兩路開(kāi)關(guān)調(diào)節(jié)器,分別供電1.8V的AVCC/AVCCDRV和1.2V電壓的VDDCORE/VD12_SYN/VD12_RF。

            B) 復(fù)位電路

            為了保證電路的穩(wěn)定可靠,RTL8753BFE RWS芯片可通過(guò)外部的復(fù)位開(kāi)關(guān)觸發(fā)HW_RST_N腳進(jìn)行復(fù)位,通常為了節(jié)省成本和空間,該方案僅僅通過(guò)外部的充電復(fù)位就可以完成系統(tǒng)的正常復(fù)位(低電平有效保持低脈沖 > 5ms即可)。

            C) 時(shí)鐘電路

            RTL8753BFE RWS芯片有兩路時(shí)鐘源,一種是40M的主時(shí)鐘源為ARM/ baseband的正常工作時(shí)鐘源,不需要外部負(fù)載電容,在MP時(shí)需要進(jìn)行校準(zhǔn),為7~9pf。另外一種是RTC時(shí)鐘源32.768k,通常工作在sleep模式下。

            D) 音頻電路

            音頻的輸入與輸出電路設(shè)計(jì),音頻輸入支持三種方式接入模式(Single end mode、Capless mode、Differential mode),其按照拾音器的不同有四種接入方式(AUX-IN、1-MIC、Dual MIC、Digital MIC),音頻輸出支持S/PDIF接口。由于本產(chǎn)品用于設(shè)計(jì)藍(lán)牙棒,其輸出設(shè)計(jì)成音頻接口即可。在這里,我們需要普及一下音頻接口以兼容大部分產(chǎn)品的應(yīng)用。在2009之前不同的設(shè)備要用不同的耳機(jī),非常的不便,在2009年9月1日國(guó)內(nèi)統(tǒng)一標(biāo)準(zhǔn),規(guī)定耳機(jī)插頭2.5mm與3.5mm兩種耳機(jī)插頭為國(guó)內(nèi)標(biāo)準(zhǔn)插頭,現(xiàn)在國(guó)內(nèi)使用的基本都是3.5mm的耳機(jī)插頭了,一般的耳機(jī)都可以通用了,此外,耳機(jī)插頭還有三段與四段,i版與n版等區(qū)別,以及之間的轉(zhuǎn)換等問(wèn)題,在耳機(jī)插頭國(guó)內(nèi)統(tǒng)一標(biāo)準(zhǔn)后,耳機(jī)的使用已經(jīng)極為的簡(jiǎn)易,并且還有非常多的轉(zhuǎn)換設(shè)備拓展耳機(jī)的使用范圍,比如一轉(zhuǎn)二共享等、連接電腦、智鍵等等,現(xiàn)在常見(jiàn)的耳機(jī)接口都是 3.5mm 音頻接口,分為 3-pole 和 4-pole 兩類(lèi),而 4-pole 中又分 Standard 和 OMTP 兩種型號(hào)。這是美國(guó)人的叫法,國(guó)內(nèi)一般把 OMTP 稱(chēng)為國(guó)標(biāo),而把稱(chēng) Standard 為 CTIA 或美標(biāo)。一般來(lái)說(shuō),Standard 型號(hào)的耳機(jī)插頭上的塑料環(huán)是白色的,而 OMTP 型號(hào)插頭上的塑料環(huán)是黑色。見(jiàn)下圖:

            4

            其中,3-pole 的接口,顧名思義在插頭上只有 3 個(gè)觸點(diǎn),從尖端到根部依次是左聲道、右聲道、電源地,所以這種接頭的耳機(jī)不支持麥克風(fēng)。而 4-pole 的接口支持麥克風(fēng),但從上圖可以清晰地看出,Standard 型號(hào)和 OMTP 型號(hào)的插頭,其麥克風(fēng)觸點(diǎn)與電源地觸點(diǎn)的位置正好相反。這就是為什么當(dāng)我們將 OMTP 插頭耳機(jī)插入 Standard 接口時(shí),聲音聽(tīng)起來(lái)不正常,但按下耳機(jī)上的通話按鍵時(shí)卻又好了,不過(guò),現(xiàn)在有的電子設(shè)備在設(shè)計(jì)時(shí),電路中加入了耳機(jī)類(lèi)型檢測(cè)芯片,如 ts3a227e,可以自動(dòng)檢測(cè)耳機(jī)接口類(lèi)型。在這樣的設(shè)備上,以上 3 種耳機(jī)都可以正常使用。

            D) RF電路設(shè)計(jì)

            RTL8753BFE 支持 IQM 和 TPM,

            —RFIO_IQM 支持雙模, 最大功率 +10dBm 、接收靈敏度 -94dBm @2M EDR

            —RFIO_TPM 是專(zhuān)用于BLE最大功率 +4dBm

            E) 天線設(shè)計(jì)

            支持pifa 天線和chip天線、頂針天線,具體的天線設(shè)計(jì)可以參考原廠參考設(shè)計(jì)及推薦廠家(萬(wàn)誠(chéng)、華新科等等)

            F) 外設(shè)引腳設(shè)計(jì)

            —GPIO(可配置高達(dá)32 GPIOs)

            —Timer 可配置PWM function

            — I2C支持master/slave模式

            —SPI支持master / slave模式

            —UART(高速串口最大速率達(dá)4M)

            —GDMA可配置達(dá)8 channel數(shù)量且支持Single & multi訪問(wèn)技術(shù)

            —ADC(8-channel /12-bit ADC)

            —Keyscan(可達(dá)12x20的最大矩陣)

            — 支持Q-decoder

            — 支持IR接收

            —支持SD host兼容SD 2.0

            —支持大容量USB傳輸

            2、軟件設(shè)計(jì)

            RTL8753BFE RWS芯片軟件設(shè)計(jì),采用一站式的“傻瓜式”設(shè)計(jì)技術(shù),讓所有的客戶輕松構(gòu)建自己的RWS無(wú)線耳機(jī)系統(tǒng),主要的軟件設(shè)計(jì)為以下:

            A)MCU 配置

            MCU配置工具主要是針對(duì)系統(tǒng)控制方面,通過(guò)配置工具能夠產(chǎn)生.SCF和.APF文件,其中.SCF文件為系統(tǒng)配置文件,.APF文件為音頻應(yīng)用參數(shù)設(shè)置文件,其主要的目的是:為每個(gè)客戶設(shè)計(jì)生成定制的配置文件和自定義操作任何源代碼的目的,這些操作全部通過(guò)APP UI工具來(lái)實(shí)現(xiàn)的。這些工具是通過(guò)特別授權(quán)的賬號(hào)可供客戶下載。

            B)DSP配置

            DSP配置工具主要是針對(duì)音頻方面的配置,其中主要包括有以下內(nèi)容:

            —聲音處理:1-mic/2-mic NR(降噪)、AEC(聲回波消除)/ AES(聲回波抑制)、MB-AGC(多波段自動(dòng)增益控制)、高通濾波器(高通濾波器)、發(fā)送端EQ配置、DAC / ADC設(shè)置

            —音頻的A2DP /輸出處理:支持音頻處理功能、MB-AGC、音頻擴(kuò)大、參數(shù)EQ、發(fā)送端EQ配置、音頻傳遞函數(shù)、模式配置、允許開(kāi)發(fā)人員以任何想要的順序排列聲音效果。

            —無(wú)線DSP控制:Bluetooth 鏈路配置

            —外圍硬件控制:主要定義I2S接口、仿真解碼接口等等

            —SDK開(kāi)發(fā)接口配置:隨客戶要求自定制可配置成語(yǔ)音和音頻接口

            三、測(cè)試

            3.1 RF 測(cè)試

            采用安立MT8852B 進(jìn)行RF 性能參數(shù)測(cè)試,具體的測(cè)試操作參考儀器說(shuō)明書(shū)。

            5

            3.2  產(chǎn)線自動(dòng)化測(cè)試項(xiàng)目

            包含了所有MT8852B測(cè)試項(xiàng)目,另外附加以下測(cè)試項(xiàng)目:

            所有MT8852B RF測(cè)試項(xiàng)目

            藍(lán)牙軟件版本測(cè)試

            設(shè)備名稱(chēng)測(cè)試

            自動(dòng)判定PASS/FAIL,提高30%測(cè)試速率

            8

            3.3 功能測(cè)試

            A) 功耗測(cè)試

            B)聲學(xué)測(cè)試

            3.4 成品簡(jiǎn)易藍(lán)牙測(cè)試程序(備注:程序來(lái)自網(wǎng)絡(luò))

             

            由于項(xiàng)目需要,筆者設(shè)計(jì)了一個(gè)在安卓平臺(tái)開(kāi)發(fā)的一個(gè)程序,能夠用藍(lán)牙和下層的單片機(jī)通訊。

            背景知識(shí)

            1.藍(lán)牙是什么?

            一種近距離無(wú)線通信協(xié)議,小功率藍(lán)牙設(shè)備(一般我們見(jiàn)到的都是)的通訊速率約為1Mbps,通訊距離為10m。

            2.藍(lán)牙分主從嗎?

            分的,藍(lán)牙組網(wǎng)的方式是:1主(<8)從。藍(lán)牙組的網(wǎng)有個(gè)可愛(ài)的名字——“微微網(wǎng)”(piconet),藍(lán)牙設(shè)備在微微網(wǎng)的地址(注意不是mac地址)是3位,因此一個(gè)微微網(wǎng)最多有8臺(tái)被激活設(shè)備。設(shè)備的主從角色的分配是在組成微微網(wǎng)時(shí)臨時(shí)確定的,不過(guò)藍(lán)牙技術(shù)支持“主從轉(zhuǎn)換”。

            3.藍(lán)牙設(shè)備都有哪些狀態(tài)?

            激活,呼吸,保持,休眠:功率依次遞減。

            框架

            我們先來(lái)看看一般的通訊模型是怎樣的

            打開(kāi)-》建立連接-》通訊-》斷開(kāi)連接-》關(guān)閉

            打開(kāi)設(shè)備是一切工作的前提,建立連接需要保證兩個(gè)藍(lán)牙設(shè)備之間的可見(jiàn)性而搜索就是找尋周?chē)乃{(lán)牙設(shè)備(此操作比較占帶寬,通訊時(shí)務(wù)必關(guān)掉),通訊就是把兩個(gè)設(shè)備用某種方式連接起來(lái)(一主一從)然后發(fā)送消息與接收消息,最后需要斷開(kāi)連接,關(guān)閉設(shè)備。

            據(jù)此,設(shè)計(jì)UI如下(接收消息按鈕僅僅是為了美觀,代碼中并未實(shí)現(xiàn)什么功能):

            6

            這個(gè)程序僅用到了一個(gè)活動(dòng):

            //實(shí)現(xiàn)OnClickListener接口是一個(gè)技巧,這樣在活動(dòng)中給控件設(shè)置監(jiān)聽(tīng)的時(shí)候直接傳this就好了,代碼會(huì)簡(jiǎn)潔許多

            7

             比較重要的是三個(gè)內(nèi)部類(lèi):

            //這三個(gè)都是線程類(lèi),和藍(lán)牙相關(guān)的會(huì)阻塞的操作都封裝在它們中

            8

             代碼

            代碼寫(xiě)的不是很完善,但完全能夠達(dá)到測(cè)試的功能

            建議把代碼復(fù)制下來(lái),再用IDE工具查看,先看框架(outline),再看細(xì)節(jié)

            //看代碼有迷惑的地方,再去看前面的類(lèi)圖,在樹(shù)林中迷了路,此時(shí)需要登高四望

            //所有的輸出均會(huì)打印到logcat中,用System.out過(guò)濾一下

            //注意:使用藍(lán)牙,需要聲明BLUETOOTH權(quán)限,如果需要掃描設(shè)備或者操作藍(lán)牙設(shè)置,則還需要BLUETOOTH_ADMIN權(quán)限,本實(shí)驗(yàn)兩個(gè)權(quán)限都需要

            · MainActivity.java

            · activity_main.xml

            測(cè)試

            1.拿出兩臺(tái)設(shè)備,安裝好程序,完成配對(duì)//配對(duì)的過(guò)程需要人為操作,與這個(gè)程序沒(méi)有關(guān)系

            2.兩臺(tái)設(shè)備均打開(kāi)藍(lán)牙(從系統(tǒng)界面或是這個(gè)程序的“打開(kāi)藍(lán)牙按鈕均可”)

            3.一臺(tái)設(shè)備通過(guò)adb連接到電腦,點(diǎn)擊“啟動(dòng)主機(jī)”按鈕

            4.在另一臺(tái)設(shè)備點(diǎn)擊“啟動(dòng)從機(jī)”按鈕

            5.在這臺(tái)設(shè)備點(diǎn)擊“發(fā)送消息”按鈕

            6.不出意外的話,logcat的System.out會(huì)打印出三條記錄——1,2,3

            MainActivity.java

            package com.example.testbluetooth;

            import java.io.IOException;

            import java.io.InputStream;

            import java.io.OutputStream;

            import java.util.Set;

            import java.util.UUID;

            import android.os.Bundle;

            import android.os.Handler;

            import android.os.Message;

            import android.app.Activity;

            import android.widget.Button;

            import android.bluetooth.BluetoothAdapter;

            import android.bluetooth.BluetoothDevice;

            import android.bluetooth.BluetoothServerSocket;

            import android.bluetooth.BluetoothSocket;

            import android.content.BroadcastReceiver;

            import android.content.Context;

            import android.content.Intent;

            import android.content.IntentFilter;

            import android.view.View;

            import android.view.View.OnClickListener;

            import android.widget.Toast;

            public class MainActivity extends Activity implements OnClickListener {
               
               //藍(lán)牙
               BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
               Set pairedDevices = mBluetoothAdapter.getBondedDevices();
               //藍(lán)牙狀態(tài)
               final BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {//接收藍(lán)牙發(fā)現(xiàn)的消息
                   @Override
                   public void onReceive(Context context, Intent intent) {
                       String action = intent.getAction();
                       if (BluetoothDevice.ACTION_FOUND.equals(action)) {
                           BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
                           System.out.println("From mBroadcastReceiver:"+device.getName() + "-" + device.getAddress());
                       }
                   }
               };
               //消息處理
               private static final int MESSAGE_READ = 0;
               private Handler mHandler = new Handler(){
                   public void handleMessage(Message msg){
                       switch(msg.what){
                       case MESSAGE_READ:
                           byte[] buffer = (byte[])msg.obj;//buffer的大小和里面數(shù)據(jù)的多少?zèng)]有關(guān)系
                           for(int i=0; i<buffer.length; i++){
                               if(buffer[i] != 0){
                                   System.out.println(buffer[i]);
                               }
                           }
                           break;
                       }
                   }
               };
               //線程
               ConnectedThread mConnectedThread;
               
               
               @Override
               protected void onCreate(Bundle savedInstanceState) {
                   super.onCreate(savedInstanceState);
                   setContentView(R.layout.activity_main);
                   //控件
                   findViewById(R.id.open).setOnClickListener(this);
                   findViewById(R.id.close).setOnClickListener(this);
                   findViewById(R.id.search).setOnClickListener(this);
                   findViewById(R.id.server).setOnClickListener(this);
                   findViewById(R.id.client).setOnClickListener(this);
                   findViewById(R.id.send).setOnClickListener(this);
                   findViewById(R.id.receive).setOnClickListener(this);
                   findViewById(R.id.paired).setOnClickListener(this);
                   //注冊(cè)廣播
                   IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND);
                   registerReceiver(mBroadcastReceiver, filter); // Don't forget to unregister during onDestroy
               }
               // a fictional method in the application
               //that will initiate the thread for transferring data
               void manageConnectedSocket(BluetoothSocket socket){//不知何故,但是在此處用Toast會(huì)出現(xiàn)Looper問(wèn)題//Toast.makeText(this, "A socket opened!", Toast.LENGTH_SHORT).show();
                   //System.out.println("From manageConnectedSocket:"+socket);
                   mConnectedThread = new ConnectedThread(socket);
                   mConnectedThread.start();
               }
               @Override
               public void onClick(View v) {
                   // TODO Auto-generated method stub
                   //設(shè)備支持不支持藍(lán)牙和有沒(méi)有插藍(lán)牙芯片沒(méi)有關(guān)系,這個(gè)是操作系統(tǒng)的事情
                   //如果系統(tǒng)不支持藍(lán)牙,會(huì)返回空,經(jīng)測(cè)試,即使沒(méi)有藍(lán)牙芯片,bluetooth的值可為非空
                   //但是如果沒(méi)有插藍(lán)牙芯片,系統(tǒng)會(huì)阻塞住
                   
                   switch (v.getId()) {
                   case R.id.open:
                       if (!mBluetoothAdapter.isEnabled()) {//如果藍(lán)牙沒(méi)有打開(kāi)
                           mBluetoothAdapter.enable();//這種打開(kāi)方式可以跳過(guò)系統(tǒng)打開(kāi)藍(lán)牙的界面
                       }            
                       break;
                   case R.id.close:
                       if (mBluetoothAdapter.isEnabled()) {//如果藍(lán)牙已經(jīng)打開(kāi)
                           mBluetoothAdapter.disable();
                       }
                       break;
                   case R.id.search:
                       if (!mBluetoothAdapter.isDiscovering()) {//如果藍(lán)牙不處于搜索狀態(tài)(即找尋附近藍(lán)牙)
                           mBluetoothAdapter.startDiscovery();//Enabling discoverability will automatically enable Bluetooth.
                       }
                       break;
                   case R.id.server:
                       new AcceptThread().start();
                       ((Button)findViewById(R.id.client)).setVisibility(View.INVISIBLE);
                       break;
                   case R.id.client:
                       for(BluetoothDevice device:pairedDevices){
                           new ConnectThread(device).start();
                           ((Button)findViewById(R.id.server)).setVisibility(View.INVISIBLE);
                       }
                       break;
                   case R.id.send:
                       if(mConnectedThread != null){
                           byte[] bytes = new byte[]{1,2,3};
                           mConnectedThread.write(bytes);
                       }
                       break;
                   case R.id.receive:
                       break;
                   case R.id.paired:
                       pairedDevices = mBluetoothAdapter.getBondedDevices();
                       for(BluetoothDevice device:pairedDevices){
                           System.out.println("From paired:"+device.getName());
                       }
                       break;
                   default:
                       break;
                   }
               }
               
               private class AcceptThread extends Thread {
                   private final BluetoothServerSocket mmServerSocket;
               
                   public AcceptThread() {
                       // Use a temporary object that is later assigned to mmServerSocket,
                       // because mmServerSocket is final
                       BluetoothServerSocket tmp = null;
                       try {
                           // MY_UUID is the app's UUID string, also used by the client code
                           tmp = mBluetoothAdapter.listenUsingRfcommWithServiceRecord("blind_nav", UUID.fromString("0c312388-5d09-4f44-b670-5461605f0b1e"));
                       } catch (IOException e) { }
                       mmServerSocket = tmp;
                   }
               
                   public void run() {
                       BluetoothSocket socket = null;
                       // Keep listening until exception occurs or a socket is returned
                       while (true) {
                           try {
                               //System.out.println("From AcceptThread:");
                               socket = mmServerSocket.accept();
                           } catch (IOException e) {
                               break;
                           }
                           // If a connection was accepted
                           if (socket != null) {
                               // Do work to manage the connection (in a separate thread)
                               manageConnectedSocket(socket);
                               try {
                                   mmServerSocket.close();
                               } catch (IOException e) {
                                   // TODO Auto-generated catch block
                                   e.printStackTrace();
                               }
                               break;
                           }
                       }
                   }
               
                   /** Will cancel the listening socket, and cause the thread to finish */
                   public void cancel() {
                       try {
                           mmServerSocket.close();
                       } catch (IOException e) { }
                   }
               }
               
               private class ConnectThread extends Thread {
                   private final BluetoothSocket mmSocket;
                   private final BluetoothDevice mmDevice;
               
                   public ConnectThread(BluetoothDevice device) {
                       // Use a temporary object that is later assigned to mmSocket,
                       // because mmSocket is final
                       BluetoothSocket tmp = null;
                       mmDevice = device;
               
                       // Get a BluetoothSocket to connect with the given BluetoothDevice
                       try {
                           // MY_UUID is the app's UUID string, also used by the server code
                           tmp = device.createRfcommSocketToServiceRecord(UUID.fromString("0c312388-5d09-4f44-b670-5461605f0b1e"));
                       } catch (IOException e) { }
                       mmSocket = tmp;
                   }
               
                   public void run() {
                       // Cancel discovery because it will slow down the connection
                       mBluetoothAdapter.cancelDiscovery();
               
                       try {
                           // Connect the device through the socket. This will block
                           // until it succeeds or throws an exception
                           mmSocket.connect();//這個(gè)操作需要幾秒鐘,不是立即能見(jiàn)效的
                       } catch (IOException connectException) {
                           // Unable to connect; close the socket and get out
                           try {
                               mmSocket.close();
                           } catch (IOException closeException) { }
                           return;
                       }
               
                       // Do work to manage the connection (in a separate thread)
                       manageConnectedSocket(mmSocket);
                   }
               
                   /** Will cancel an in-progress connection, clean up all internal resources, and close the socket */
                   public void cancel() {
                       try {
                           mmSocket.close();
                       } catch (IOException e) { }
                   }
               }
               
               private class ConnectedThread extends Thread {
                   private final BluetoothSocket mmSocket;
                   private final InputStream mmInStream;
                   private final OutputStream mmOutStream;
               
                   public ConnectedThread(BluetoothSocket socket) {
                       mmSocket = socket;
                       InputStream tmpIn = null;
                       OutputStream tmpOut = null;
               
                       // Get the input and output streams, using temp objects because
                       // member streams are final
                       try {
                           tmpIn = socket.getInputStream();
                           tmpOut = socket.getOutputStream();
                       } catch (IOException e) { }
               
                       mmInStream = tmpIn;
                       mmOutStream = tmpOut;
                   }
               
                   public void run() {
                       byte[] buffer = new byte[1024];  // buffer store for the stream
                       int bytes; // bytes returned from read()
               
                       // Keep listening to the InputStream until an exception occurs
                       while (true) {
                           try {
                               // Read from the InputStream
                               bytes = mmInStream.read(buffer);
                               // Send the obtained bytes to the UI activity
                               //Message msg = new Message();
                               //msg.what = MESSAGE_READ;
                               mHandler.obtainMessage(MESSAGE_READ, bytes, -1, buffer)
                                       .sendToTarget();
                           } catch (IOException e) {
                               break;
                           }
                       }
                   }
               
                   /* Call this from the main activity to send data to the remote device */
                   public void write(byte[] bytes) {
                       try {
                           mmOutStream.write(bytes);
                       } catch (IOException e) { }
                   }
               
                   /* Call this from the main activity to shutdown the connection */
                   public void cancel() {
                       try {
                           mmSocket.close();
                       } catch (IOException e) { }
                   }
               }
               
               
            }

            activity_main.xml

            ? 場(chǎng)景應(yīng)用圖

            sceneryUrl

            ? 產(chǎn)品實(shí)體圖

            imgUrl

            ? 展示版照片

            frontUrl

            backUrl

            ? 方案方塊圖

            funcUrl

            ? 核心技術(shù)優(yōu)勢(shì)

            瑞昱RTL8753BFE主控芯片不僅支持藍(lán)牙5.1、雙耳通話,還支持HFP1.7、HSP1.2、A2DP1.3、AVRCP1.6、SPP1.2、PBAP1.0等多種耳機(jī)模式。

            1. Dual mode 5.1

            2. 優(yōu)異的RF性能: 10dBm(typ) transmit power and  receiver sensitivity to : -94.0 dBm (typ) 2M EDR; -97.0 dBm (typ) BLE; -106.5 dBm (typ) 125K BLE

            3. 支援OTA更新firmware

            4. 支援開(kāi)放式SDK平臺(tái),讓用戶開(kāi)發(fā)特色化商品

            5.超低功耗,播放音樂(lè)時(shí)電流&lt;8mA

            ? 方案規(guī)格

            1. 支持雙咪降噪功能(可選)

            2. 支持光感開(kāi)關(guān)機(jī)

            3. 支持自動(dòng)充電開(kāi)關(guān)機(jī)

            4. 支持可設(shè)定化的EQ



            評(píng)論


            相關(guān)推薦

            技術(shù)專(zhuān)區(qū)

            關(guān)閉