您尚未登录。

楼主 #1 2018-05-08 16:25:37

mkseven32
会员
注册时间: 2018-04-24
已发帖子: 57
积分: 57

请问AVRCP 中命令值的定义 在哪里?

今天看来 A2DP 的例程, 由于之前没有接触过 经典蓝牙, 对AVRCP 的profile不熟悉。。

看到一点 关于 控制命令的, 发现没有音量控制的。 想加个音量控制的上去,
但是看到 这些命令的值 挺特别, 应该是profile 规定的~~~ 于是 去看AVRCP 的profile  找了半天 都没找到 这些命令的 值 如何规定~~~~

/// AVRC passthrough command code
typedef enum {
    ESP_AVRC_PT_CMD_PLAY = 0x44,                 /*!< play */
    ESP_AVRC_PT_CMD_STOP = 0x45,                 /*!< stop */
    ESP_AVRC_PT_CMD_PAUSE = 0x46,                /*!< pause */
    ESP_AVRC_PT_CMD_FORWARD = 0x4B,              /*!< forward */
    ESP_AVRC_PT_CMD_BACKWARD = 0x4C,             /*!< backward */
    ESP_AVRC_PT_CMD_REWIND = 0x48,               /*!< rewind */
    ESP_AVRC_PT_CMD_FAST_FORWARD = 0x49          /*!< fast forward */
} esp_avrc_pt_cmd_t;

请各位熟悉AVRCP 的指点指点。

另外有个奇怪的问题, 我尝试将play 命令 的值 修改为0x40 ,编译后下载,发现这个命令还是有效~~~~
这就奇怪了, 如果这个值没有意义  为啥 又要定这样 特别的值呢?

离线

#2 2018-05-08 16:32:46

晕哥
管理员
所在地: 微信 whycan_cn
注册时间: 2017-09-06
已发帖子: 9,223
积分: 9197

Re: 请问AVRCP 中命令值的定义 在哪里?

正在玩 btstack, 刚好帮你查了一下, 看这个有没有帮助:

https://github.com/bluekitchen/btstack/blob/master/src/classic/avrcp_controller.h

/**
* @brief Stops continuous cmd (play, pause, volume up, ...). Event AVRCP_SUBEVENT_OPERATION_COMPLETE returns operation id and status.
* @param avrcp_cid
* @returns status
*/
uint8_t avrcp_controller_release_press_and_hold_cmd(uint16_t avrcp_cid);





离线

#3 2018-05-08 16:40:38

晕哥
管理员
所在地: 微信 whycan_cn
注册时间: 2017-09-06
已发帖子: 9,223
积分: 9197

Re: 请问AVRCP 中命令值的定义 在哪里?

https://github.com/bluekitchen/btstack/blob/master/test/pts/avrcp_controller_test.c

        case '0':
            switch (cmd[1]){
                case '1':
                    printf("AVRCP: play\n");
                    avrcp_controller_play(avrcp_cid);
                    break;
                case '2':
                    printf("AVRCP: stop\n");
                    avrcp_controller_stop(avrcp_cid);
                    break;
                case '3':
                    printf("AVRCP: pause\n");
                    avrcp_controller_pause(avrcp_cid);
                    break;
                case '4':
                    printf("AVRCP: fast forward\n");
                    avrcp_controller_fast_forward(avrcp_cid);
                    break;
                case '5':
                    printf("AVRCP: rewind\n");
                    avrcp_controller_rewind(avrcp_cid);
                    break;
                case '6':
                    printf("AVRCP: forward\n");
                    avrcp_controller_forward(avrcp_cid); 
                    break;
                case '7':
                    printf("AVRCP: backward\n");
                    avrcp_controller_backward(avrcp_cid);
                    break;
                case '8':
                    printf("AVRCP: volume up\n");
                    avrcp_controller_volume_up(avrcp_cid);
                    break;
                case '9':
                    printf("AVRCP: volume down\n");
                    avrcp_controller_volume_down(avrcp_cid);
                    break;
                case '0':
                    printf("AVRCP: mute\n");
                    avrcp_controller_mute(avrcp_cid);
                    break;

从这里看, 貌似命令都转成了 avrcp 指令.





离线

#4 2018-05-08 16:42:35

晕哥
管理员
所在地: 微信 whycan_cn
注册时间: 2017-09-06
已发帖子: 9,223
积分: 9197

Re: 请问AVRCP 中命令值的定义 在哪里?

https://github.com/bluekitchen/btstack/blob/master/src/classic/avrcp.h

找到定义了:

    AVRCP_OPERATION_ID_PLAY = 0x44,
    AVRCP_OPERATION_ID_STOP = 0x45,
    AVRCP_OPERATION_ID_PAUSE = 0x46,
    AVRCP_OPERATION_ID_REWIND = 0x48,
    AVRCP_OPERATION_ID_FAST_FORWARD = 0x49,
    AVRCP_OPERATION_ID_FORWARD = 0x4B,
    AVRCP_OPERATION_ID_BACKWARD = 0x4C,
    AVRCP_OPERATION_ID_UNDEFINED = 0xFF

看来这些值是不能随便改的, 看你是不是没有重新编译成功, 或者烧录有问题?





离线

楼主 #5 2018-05-08 17:04:42

mkseven32
会员
注册时间: 2018-04-24
已发帖子: 57
积分: 57

Re: 请问AVRCP 中命令值的定义 在哪里?

晕哥 说:

https://github.com/bluekitchen/btstack/blob/master/src/classic/avrcp.h

找到定义了:

    AVRCP_OPERATION_ID_PLAY = 0x44,
    AVRCP_OPERATION_ID_STOP = 0x45,
    AVRCP_OPERATION_ID_PAUSE = 0x46,
    AVRCP_OPERATION_ID_REWIND = 0x48,
    AVRCP_OPERATION_ID_FAST_FORWARD = 0x49,
    AVRCP_OPERATION_ID_FORWARD = 0x4B,
    AVRCP_OPERATION_ID_BACKWARD = 0x4C,
    AVRCP_OPERATION_ID_UNDEFINED = 0xFF

看来这些值是不能随便改的, 看你是不是没有重新编译成功, 或者烧录有问题?

是啊, 我对比了其他方案的SDK ,发现其他家的 也是这样定义, 所以这个应该是profile 规定的!

但是看了一下午profile ,没找到这些命令 没有找到具体说明~~~

离线

#6 2018-05-08 18:02:10

晕哥
管理员
所在地: 微信 whycan_cn
注册时间: 2017-09-06
已发帖子: 9,223
积分: 9197

Re: 请问AVRCP 中命令值的定义 在哪里?

AUDIO/VIDEO REMOTE CONTROL PROFILE: AVRCP_SPEC_V14r00.pdf

40 Play. This PASSTHROUGH command is supported. 5 0
41 Stop. This PASSTHROUGH command is supported. 5 1
42 Pause. This PASSTHROUGH command is supported. 5 2
43 Record. This PASSTHROUGH command is supported. 5 3
44 Rewind. This PASSTHROUGH command is supported. 5 4 

果然没找到定义.





离线

#7 2018-05-08 18:09:55

晕哥
管理员
所在地: 微信 whycan_cn
注册时间: 2017-09-06
已发帖子: 9,223
积分: 9197

Re: 请问AVRCP 中命令值的定义 在哪里?

https://www.silabs.com/documents/login/application-notes/AN986.pdf

Note:
Not all devices support all command code. For example, iOS devices do not support remote volume control
using 0x41, 0x42, or 0x43 commands. This is a limitation of iOS and not an iWRAP firmware problem.

注意:
并非所有设备都支持所有命令代码。例如,iOS设备不支持远程音量控制
使用0x41,0x42或0x43命令。这是iOS的限制,而不是iWRAP固件问题。





离线

楼主 #8 2018-05-10 17:09:00

mkseven32
会员
注册时间: 2018-04-24
已发帖子: 57
积分: 57

Re: 请问AVRCP 中命令值的定义 在哪里?

晕哥 说:

https://www.silabs.com/documents/login/application-notes/AN986.pdf

Note:
Not all devices support all command code. For example, iOS devices do not support remote volume control
using 0x41, 0x42, or 0x43 commands. This is a limitation of iOS and not an iWRAP firmware problem.

注意:
并非所有设备都支持所有命令代码。例如,iOS设备不支持远程音量控制
使用0x41,0x42或0x43命令。这是iOS的限制,而不是iWRAP固件问题。

今天强制 使用0x41 和0x42  这样的命令,发现 苹果5 播放音乐确实是不支持。

但我有一个疑问,那作为CT 设备  它本事应该支持, (在他不清楚TG 是否为IOS 设备情况 它应该支持才对,不然如果是安卓的手机来连接 它呢)?

离线

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn