5

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

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

但是当我的手环返回命令“AT+CIND=?”时 我不知道该如何回应。我找不到有关如何使用“CIND:”命令回答的任何提示。另外我不知道如何发送确认(只是“OK”吗?)。

这甚至可能是完全错误的方法。每一个建议都值得赞赏。我只在 stackoverflow 上找到了一篇某种程度上对我有帮助的帖子,我发现的其他帖子都没有得到答复。顺便说一句,我使用的是安卓 4.1.2 的智能手机。手环支持HFP和HSP。提前致谢。

2014 年 10 月 29 日更新

服务级别连接程序

=====此时通过RFCOMM Socket建立连接=====

        // 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?” 命令。实际上我没有收到任何东西。我错过了什么吗?顺便说一句,发送“OK”不会改变任何事情......

4

3 回答 3

2

我正在摆弄同样的问题。经过几天的反复试验,我终于让它工作了。我认为这取决于您回答 HF 命令的速度,以及正确的行尾(“COMMAND”)。

这是我的 DroidScript,它有效。它没有清理干净,但它可以工作。

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

于 2015-02-20T14:23:17.490 回答
2

另外,我发现的一个例子似乎几乎可以工作,它期望响应是顶部和尾随 crlf: "\r\n+BRSF=20\r\n" "\r\nOK\r\n"

我自己还在为剩下的事情苦苦挣扎。

于 2018-07-08T09:06:30.500 回答
0

请参阅蓝牙 hfp 1.5 规范,其中您可以在没有任何呼叫设置时正常理解 CIEV 响应,响应可以是 +CIND = 1,0,0,0,5,0,5 注意这些值基于 hfp 规范,来电返回 +CIEV: , ind- 指示 callsetup 和 value 为 1 然后 RING 命令发送到手环

于 2014-10-14T06:40:20.117 回答