今天看来 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 ,编译后下载,发现这个命令还是有效~~~~
这就奇怪了, 如果这个值没有意义 为啥 又要定这样 特别的值呢?
离线
正在玩 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);
离线
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 指令.
离线
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
看来这些值是不能随便改的, 看你是不是没有重新编译成功, 或者烧录有问题?
离线
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 ,没找到这些命令 没有找到具体说明~~~
离线
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
果然没找到定义.
离线
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固件问题。
离线
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 设备情况 它应该支持才对,不然如果是安卓的手机来连接 它呢)?
离线