Android通过AT命令与HFP设备通信

时间:2014-10-13 14:26:53

标签: android bluetooth at-command hfp

我试图通过Android中的HFP(免提配置文件)控制具有振动功能的蓝牙手环。我已经能够连接到手镯并访问输入和输出流。

我的目标是模拟来电,以便蓝牙手镯开始振动(这似乎是唯一的方法)。为此,我使用AT命令。在第22页的https://www.bluetooth.org/docman/handlers/downloaddoc.ashx?doc_id=238193的蓝牙规格中,您可以看到握手以建立服务级别连接。 我需要建立此连接以使用" + CIEV"命令(参见握手第48页)。

但是当我的手镯返回命令" AT + CIND =?"我不知道如何回应。我无法找到关于如何回答" CIND的任何提示:"命令。此外,我不知道如何发送确认(只是"好的"?)。

这甚至可能是完全错误的方法。每个建议都表示赞赏。我只在stackoverflow上找到一个post以某种方式帮助了我,我找到的其他帖子都没有得到答复。 顺便说一句,即时通讯使用Android 4.1.2的智能手机。手镯支持HFP和HSP。提前谢谢。

更新2014年10月29日

Service Level Connection Procedure

=====此时建立的RFCOMM套接字连接=====

        // read AT+BRSF=0 from device
        byte[] buffer = new byte[200];
        mBluetoothSocket.getInputStream().read(buffer);
        Log.d(TAG, new String(buffer).trim());

        //write answer BRSF: ...
        mBluetoothSocket.getOutputStream().write("+BRSF=20\r".getBytes());
        mBluetoothSocket.getOutputStream().write("OK\r".getBytes());

        // read AT+CIND=? command
        buffer = new byte[200];
        mBluetoothSocket.getInputStream().read(buffer);
        Log.d(TAG, new String(buffer).trim());

        //write answer CIND: ...
        mBluetoothSocket.getOutputStream().write("+CIND: (\"battchg\",(0-5)),(\"signal\",(0-5)),
           (\"service\",(0,1)),(\"call\",(0,1)),(\"callsetup\",(0-3)),
           (\"callheld\",(0-2)),(\"roam\",(0,1))".getBytes());
        mBluetoothSocket.getOutputStream().write("OK".getBytes());

        // read AT+CIND?
        buffer = new byte[200];
        mBluetoothSocket.getInputStream().read(buffer);
        Log.d(TAG, new String(buffer).trim());

遵循协议的程序,我应该收到" AT + CIND?"命令,然后我可以发送命令" + CIND:5,5,1,0,0,0,0",但是......我没有收到" AT + CIND?&# 34;命令。其实我没有收到任何东西。我错过了什么吗?发送" OK"不会改变什么btw ...

3 个答案:

答案 0 :(得分:1)

我对同样的问题提出了异议。经过几天的反复试验,我终于开始工作了。 我认为这取决于您回答HF命令的速度,以及正确的行尾(“COMMAND”)。

这是我的DroidScript有效。它没有清理,但它确实有效。

https://gist.github.com/t-oster/68a568ac4c4e133f67ac

答案 1 :(得分:1)

此外,我发现的一个例子似乎几乎可以正常工作,它期望响应以crlf开头和结尾: “ \ r \ n + BRSF = 20 \ r \ n” “ \ r \ nOK \ r \ n”

我自己仍然在努力解决其他问题。

答案 2 :(得分:0)

参考蓝牙hfp 1.5规范,您可以在其中了解CIEV响应 通常,当不在任何呼叫设置中时,响应可以是+ CIND = 1,0,0,0,5,0,5 注意这些值是基于hfp规范,来电回复+ CIEV :, ind-指示callsetup和value为1然后RING命令到手镯