avrcp-lib.h 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343
  1. /* SPDX-License-Identifier: LGPL-2.1-or-later */
  2. /*
  3. *
  4. * BlueZ - Bluetooth protocol stack for Linux
  5. *
  6. * Copyright (C) 2014 Intel Corporation. All rights reserved.
  7. *
  8. *
  9. */
  10. /* Control PDU ids */
  11. #define AVRCP_GET_CAPABILITIES 0x10
  12. #define AVRCP_LIST_PLAYER_ATTRIBUTES 0X11
  13. #define AVRCP_LIST_PLAYER_VALUES 0x12
  14. #define AVRCP_GET_CURRENT_PLAYER_VALUE 0x13
  15. #define AVRCP_SET_PLAYER_VALUE 0x14
  16. #define AVRCP_GET_PLAYER_ATTRIBUTE_TEXT 0x15
  17. #define AVRCP_GET_PLAYER_VALUE_TEXT 0x16
  18. #define AVRCP_DISPLAYABLE_CHARSET 0x17
  19. #define AVRCP_CT_BATTERY_STATUS 0x18
  20. #define AVRCP_GET_ELEMENT_ATTRIBUTES 0x20
  21. #define AVRCP_GET_PLAY_STATUS 0x30
  22. #define AVRCP_REGISTER_NOTIFICATION 0x31
  23. #define AVRCP_REQUEST_CONTINUING 0x40
  24. #define AVRCP_ABORT_CONTINUING 0x41
  25. #define AVRCP_SET_ABSOLUTE_VOLUME 0x50
  26. #define AVRCP_SET_ADDRESSED_PLAYER 0x60
  27. #define AVRCP_SET_BROWSED_PLAYER 0x70
  28. #define AVRCP_GET_FOLDER_ITEMS 0x71
  29. #define AVRCP_CHANGE_PATH 0x72
  30. #define AVRCP_GET_ITEM_ATTRIBUTES 0x73
  31. #define AVRCP_PLAY_ITEM 0x74
  32. #define AVRCP_SEARCH 0x80
  33. #define AVRCP_ADD_TO_NOW_PLAYING 0x90
  34. #define AVRCP_GENERAL_REJECT 0xA0
  35. /* Notification events */
  36. #define AVRCP_EVENT_STATUS_CHANGED 0x01
  37. #define AVRCP_EVENT_TRACK_CHANGED 0x02
  38. #define AVRCP_EVENT_TRACK_REACHED_END 0x03
  39. #define AVRCP_EVENT_TRACK_REACHED_START 0x04
  40. #define AVRCP_EVENT_PLAYBACK_POS_CHANGED 0x05
  41. #define AVRCP_EVENT_SETTINGS_CHANGED 0x08
  42. #define AVRCP_EVENT_NOW_PLAYING_CONTENT_CHANGED 0x09
  43. #define AVRCP_EVENT_AVAILABLE_PLAYERS_CHANGED 0x0a
  44. #define AVRCP_EVENT_ADDRESSED_PLAYER_CHANGED 0x0b
  45. #define AVRCP_EVENT_UIDS_CHANGED 0x0c
  46. #define AVRCP_EVENT_VOLUME_CHANGED 0x0d
  47. #define AVRCP_EVENT_LAST AVRCP_EVENT_VOLUME_CHANGED
  48. /* Status codes */
  49. #define AVRCP_STATUS_INVALID_COMMAND 0x00
  50. #define AVRCP_STATUS_INVALID_PARAM 0x01
  51. #define AVRCP_STATUS_PARAM_NOT_FOUND 0x02
  52. #define AVRCP_STATUS_INTERNAL_ERROR 0x03
  53. #define AVRCP_STATUS_SUCCESS 0x04
  54. #define AVRCP_STATUS_UID_CHANGED 0x05
  55. #define AVRCP_STATUS_NOT_DIRECTORY 0x08
  56. #define AVRCP_STATUS_DOES_NOT_EXIST 0x09
  57. #define AVRCP_STATUS_INVALID_SCOPE 0x0a
  58. #define AVRCP_STATUS_OUT_OF_BOUNDS 0x0b
  59. #define AVRCP_STATUS_INVALID_PLAYER_ID 0x11
  60. #define AVRCP_STATUS_PLAYER_NOT_BROWSABLE 0x12
  61. #define AVRCP_STATUS_NO_AVAILABLE_PLAYERS 0x15
  62. #define AVRCP_STATUS_ADDRESSED_PLAYER_CHANGED 0x16
  63. /* Capabilities for AVRCP_GET_CAPABILITIES pdu */
  64. #define CAP_COMPANY_ID 0x02
  65. #define CAP_EVENTS_SUPPORTED 0x03
  66. /* Player Attributes */
  67. #define AVRCP_ATTRIBUTE_ILEGAL 0x00
  68. #define AVRCP_ATTRIBUTE_EQUALIZER 0x01
  69. #define AVRCP_ATTRIBUTE_REPEAT_MODE 0x02
  70. #define AVRCP_ATTRIBUTE_SHUFFLE 0x03
  71. #define AVRCP_ATTRIBUTE_SCAN 0x04
  72. #define AVRCP_ATTRIBUTE_LAST AVRCP_ATTRIBUTE_SCAN
  73. /* equalizer values */
  74. #define AVRCP_EQUALIZER_OFF 0x01
  75. #define AVRCP_EQUALIZER_ON 0x02
  76. /* repeat mode values */
  77. #define AVRCP_REPEAT_MODE_OFF 0x01
  78. #define AVRCP_REPEAT_MODE_SINGLE 0x02
  79. #define AVRCP_REPEAT_MODE_ALL 0x03
  80. #define AVRCP_REPEAT_MODE_GROUP 0x04
  81. /* shuffle values */
  82. #define AVRCP_SHUFFLE_OFF 0x01
  83. #define AVRCP_SHUFFLE_ALL 0x02
  84. #define AVRCP_SHUFFLE_GROUP 0x03
  85. /* scan values */
  86. #define AVRCP_SCAN_OFF 0x01
  87. #define AVRCP_SCAN_ALL 0x02
  88. #define AVRCP_SCAN_GROUP 0x03
  89. /* media attributes */
  90. #define AVRCP_MEDIA_ATTRIBUTE_ILLEGAL 0x00
  91. #define AVRCP_MEDIA_ATTRIBUTE_TITLE 0x01
  92. #define AVRCP_MEDIA_ATTRIBUTE_ARTIST 0x02
  93. #define AVRCP_MEDIA_ATTRIBUTE_ALBUM 0x03
  94. #define AVRCP_MEDIA_ATTRIBUTE_TRACK 0x04
  95. #define AVRCP_MEDIA_ATTRIBUTE_N_TRACKS 0x05
  96. #define AVRCP_MEDIA_ATTRIBUTE_GENRE 0x06
  97. #define AVRCP_MEDIA_ATTRIBUTE_DURATION 0x07
  98. #define AVRCP_MEDIA_ATTRIBUTE_LAST AVRCP_MEDIA_ATTRIBUTE_DURATION
  99. /* Media Scope */
  100. #define AVRCP_MEDIA_PLAYER_LIST 0x00
  101. #define AVRCP_MEDIA_PLAYER_VFS 0x01
  102. #define AVRCP_MEDIA_SEARCH 0x02
  103. #define AVRCP_MEDIA_NOW_PLAYING 0x03
  104. /* SDP features */
  105. #define AVRCP_FEATURE_CATEGORY_1 0x0001
  106. #define AVRCP_FEATURE_CATEGORY_2 0x0002
  107. #define AVRCP_FEATURE_CATEGORY_3 0x0004
  108. #define AVRCP_FEATURE_CATEGORY_4 0x0008
  109. #define AVRCP_FEATURE_PLAYER_SETTINGS 0x0010
  110. #define AVRCP_FEATURE_GROUP_NAVIGATION 0x0020
  111. #define AVRCP_FEATURE_BROWSING 0x0040
  112. #define AVRCP_FEATURE_MULTIPLE_PLAYERS 0x0080
  113. /* Company IDs for vendor dependent commands */
  114. #define IEEEID_BTSIG 0x001958
  115. struct avrcp;
  116. struct avrcp_control_ind {
  117. int (*get_capabilities) (struct avrcp *session, uint8_t transaction,
  118. void *user_data);
  119. int (*list_attributes) (struct avrcp *session, uint8_t transaction,
  120. void *user_data);
  121. int (*get_attribute_text) (struct avrcp *session, uint8_t transaction,
  122. uint8_t number, uint8_t *attrs,
  123. void *user_data);
  124. int (*list_values) (struct avrcp *session, uint8_t transaction,
  125. uint8_t attr, void *user_data);
  126. int (*get_value_text) (struct avrcp *session, uint8_t transaction,
  127. uint8_t attr, uint8_t number,
  128. uint8_t *values, void *user_data);
  129. int (*get_value) (struct avrcp *session, uint8_t transaction,
  130. uint8_t number, uint8_t *attrs,
  131. void *user_data);
  132. int (*set_value) (struct avrcp *session, uint8_t transaction,
  133. uint8_t number, uint8_t *attrs,
  134. uint8_t *values, void *user_data);
  135. int (*get_play_status) (struct avrcp *session, uint8_t transaction,
  136. void *user_data);
  137. int (*get_element_attributes) (struct avrcp *session,
  138. uint8_t transaction, uint64_t uid,
  139. uint8_t number, uint32_t *attrs,
  140. void *user_data);
  141. int (*register_notification) (struct avrcp *session,
  142. uint8_t transaction, uint8_t event,
  143. uint32_t interval, void *user_data);
  144. int (*set_volume) (struct avrcp *session, uint8_t transaction,
  145. uint8_t volume, void *user_data);
  146. int (*set_addressed) (struct avrcp *session, uint8_t transaction,
  147. uint16_t id, void *user_data);
  148. int (*set_browsed) (struct avrcp *session, uint8_t transaction,
  149. uint16_t id, void *user_data);
  150. int (*get_folder_items) (struct avrcp *session, uint8_t transaction,
  151. uint8_t scope, uint32_t start,
  152. uint32_t end, uint16_t number,
  153. uint32_t *attrs, void *user_data);
  154. int (*change_path) (struct avrcp *session, uint8_t transaction,
  155. uint16_t counter, uint8_t direction,
  156. uint64_t uid, void *user_data);
  157. int (*get_item_attributes) (struct avrcp *session, uint8_t transaction,
  158. uint8_t scope, uint64_t uid,
  159. uint16_t counter, uint8_t number,
  160. uint32_t *attrs, void *user_data);
  161. int (*play_item) (struct avrcp *session, uint8_t transaction,
  162. uint8_t scope, uint64_t uid,
  163. uint16_t counter, void *user_data);
  164. int (*search) (struct avrcp *session, uint8_t transaction,
  165. const char *string, void *user_data);
  166. int (*add_to_now_playing) (struct avrcp *session, uint8_t transaction,
  167. uint8_t scope, uint64_t uid,
  168. uint16_t counter, void *user_data);
  169. };
  170. struct avrcp_control_cfm {
  171. void (*get_capabilities) (struct avrcp *session, int err,
  172. uint8_t number, uint8_t *params,
  173. void *user_data);
  174. void (*list_attributes) (struct avrcp *session, int err,
  175. uint8_t number, uint8_t *attrs,
  176. void *user_data);
  177. void (*get_attribute_text) (struct avrcp *session, int err,
  178. uint8_t number, uint8_t *attrs,
  179. char **text, void *user_data);
  180. void (*list_values) (struct avrcp *session, int err,
  181. uint8_t number, uint8_t *values,
  182. void *user_data);
  183. void (*get_value_text) (struct avrcp *session, int err,
  184. uint8_t number, uint8_t *values,
  185. char **text, void *user_data);
  186. void (*get_value) (struct avrcp *session, int err,
  187. uint8_t number, uint8_t *attrs,
  188. uint8_t *values, void *user_data);
  189. void (*set_value) (struct avrcp *session, int err, void *user_data);
  190. void (*get_play_status) (struct avrcp *session, int err,
  191. uint8_t status, uint32_t position,
  192. uint32_t duration, void *user_data);
  193. void (*get_element_attributes) (struct avrcp *session, int err,
  194. uint8_t number, uint32_t *attrs,
  195. char **text, void *user_data);
  196. bool (*register_notification) (struct avrcp *session, int err,
  197. uint8_t code, uint8_t event,
  198. void *params, void *user_data);
  199. void (*set_volume) (struct avrcp *session, int err, uint8_t volume,
  200. void *user_data);
  201. void (*set_addressed) (struct avrcp *session, int err,
  202. void *user_data);
  203. void (*set_browsed) (struct avrcp *session, int err,
  204. uint16_t counter, uint32_t items,
  205. char *path, void *user_data);
  206. void (*get_folder_items) (struct avrcp *session, int err,
  207. uint16_t counter, uint16_t number,
  208. uint8_t *params, void *user_data);
  209. void (*change_path) (struct avrcp *session, int err,
  210. uint32_t items, void *user_data);
  211. void (*get_item_attributes) (struct avrcp *session, int err,
  212. uint8_t number, uint32_t *attrs,
  213. char **text, void *user_data);
  214. void (*play_item) (struct avrcp *session, int err, void *user_data);
  215. void (*search) (struct avrcp *session, int err, uint16_t counter,
  216. uint32_t items, void *user_data);
  217. void (*add_to_now_playing) (struct avrcp *session, int err,
  218. void *user_data);
  219. };
  220. struct avrcp_passthrough_handler {
  221. uint8_t op;
  222. bool (*func) (struct avrcp *session, bool pressed, void *user_data);
  223. };
  224. typedef void (*avrcp_destroy_cb_t) (void *user_data);
  225. struct avrcp *avrcp_new(int fd, size_t imtu, size_t omtu, uint16_t version);
  226. void avrcp_shutdown(struct avrcp *session);
  227. void avrcp_set_destroy_cb(struct avrcp *session, avrcp_destroy_cb_t cb,
  228. void *user_data);
  229. int avrcp_connect_browsing(struct avrcp *session, int fd, size_t imtu,
  230. size_t omtu);
  231. void avrcp_register_player(struct avrcp *session,
  232. const struct avrcp_control_ind *ind,
  233. const struct avrcp_control_cfm *cfm,
  234. void *user_data);
  235. void avrcp_set_passthrough_handlers(struct avrcp *session,
  236. const struct avrcp_passthrough_handler *handlers,
  237. void *user_data);
  238. int avrcp_init_uinput(struct avrcp *session, const char *name,
  239. const char *address);
  240. int avrcp_send(struct avrcp *session, uint8_t transaction, uint8_t code,
  241. uint8_t subunit, uint8_t pdu_id,
  242. const struct iovec *iov, int iov_cnt);
  243. int avrcp_get_capabilities(struct avrcp *session, uint8_t param);
  244. int avrcp_register_notification(struct avrcp *session, uint8_t event,
  245. uint32_t interval);
  246. int avrcp_list_player_attributes(struct avrcp *session);
  247. int avrcp_get_player_attribute_text(struct avrcp *session, uint8_t number,
  248. uint8_t *attrs);
  249. int avrcp_list_player_values(struct avrcp *session, uint8_t attr);
  250. int avrcp_get_player_value_text(struct avrcp *session, uint8_t attr,
  251. uint8_t number, uint8_t *values);
  252. int avrcp_set_player_value(struct avrcp *session, uint8_t number,
  253. uint8_t *attrs, uint8_t *values);
  254. int avrcp_get_current_player_value(struct avrcp *session, uint8_t number,
  255. uint8_t *attrs);
  256. int avrcp_get_play_status(struct avrcp *session);
  257. int avrcp_set_volume(struct avrcp *session, uint8_t volume);
  258. int avrcp_get_element_attributes(struct avrcp *session);
  259. int avrcp_set_addressed_player(struct avrcp *session, uint16_t player_id);
  260. int avrcp_set_browsed_player(struct avrcp *session, uint16_t player_id);
  261. int avrcp_get_folder_items(struct avrcp *session, uint8_t scope,
  262. uint32_t start, uint32_t end, uint8_t number,
  263. uint32_t *attrs);
  264. int avrcp_change_path(struct avrcp *session, uint8_t direction, uint64_t uid,
  265. uint16_t counter);
  266. int avrcp_get_item_attributes(struct avrcp *session, uint8_t scope,
  267. uint64_t uid, uint16_t counter, uint8_t number,
  268. uint32_t *attrs);
  269. int avrcp_play_item(struct avrcp *session, uint8_t scope, uint64_t uid,
  270. uint16_t counter);
  271. int avrcp_search(struct avrcp *session, const char *string);
  272. int avrcp_add_to_now_playing(struct avrcp *session, uint8_t scope, uint64_t uid,
  273. uint16_t counter);
  274. int avrcp_get_capabilities_rsp(struct avrcp *session, uint8_t transaction,
  275. uint8_t number, uint8_t *events);
  276. int avrcp_list_player_attributes_rsp(struct avrcp *session, uint8_t transaction,
  277. uint8_t number, uint8_t *attrs);
  278. int avrcp_get_player_attribute_text_rsp(struct avrcp *session,
  279. uint8_t transaction, uint8_t number,
  280. uint8_t *attrs, const char **text);
  281. int avrcp_list_player_values_rsp(struct avrcp *session, uint8_t transaction,
  282. uint8_t number, uint8_t *values);
  283. int avrcp_get_play_status_rsp(struct avrcp *session, uint8_t transaction,
  284. uint32_t position, uint32_t duration,
  285. uint8_t status);
  286. int avrcp_get_player_values_text_rsp(struct avrcp *session,
  287. uint8_t transaction, uint8_t number,
  288. uint8_t *values, const char **text);
  289. int avrcp_get_current_player_value_rsp(struct avrcp *session,
  290. uint8_t transaction, uint8_t number,
  291. uint8_t *attrs, uint8_t *values);
  292. int avrcp_set_player_value_rsp(struct avrcp *session, uint8_t transaction);
  293. int avrcp_get_element_attrs_rsp(struct avrcp *session, uint8_t transaction,
  294. uint8_t *params, size_t params_len);
  295. int avrcp_register_notification_rsp(struct avrcp *session, uint8_t transaction,
  296. uint8_t code, uint8_t event,
  297. void *data, size_t len);
  298. int avrcp_set_volume_rsp(struct avrcp *session, uint8_t transaction,
  299. uint8_t volume);
  300. int avrcp_set_addressed_player_rsp(struct avrcp *session, uint8_t transaction,
  301. uint8_t status);
  302. int avrcp_set_browsed_player_rsp(struct avrcp *session, uint8_t transaction,
  303. uint8_t status, uint16_t counter,
  304. uint32_t items, uint8_t depth,
  305. const char **folders);
  306. int avrcp_get_folder_items_rsp(struct avrcp *session, uint8_t transaction,
  307. uint8_t status, uint16_t counter,
  308. uint8_t number, uint8_t *type,
  309. uint16_t *len, uint8_t **params);
  310. int avrcp_change_path_rsp(struct avrcp *session, uint8_t transaction,
  311. uint8_t status, uint32_t items);
  312. int avrcp_get_item_attributes_rsp(struct avrcp *session, uint8_t transaction,
  313. uint8_t status, uint8_t number,
  314. uint32_t *attrs, const char **text);
  315. int avrcp_play_item_rsp(struct avrcp *session, uint8_t transaction,
  316. uint8_t status);
  317. int avrcp_search_rsp(struct avrcp *session, uint8_t transaction, uint8_t status,
  318. uint16_t counter, uint32_t items);
  319. int avrcp_add_to_now_playing_rsp(struct avrcp *session, uint8_t transaction,
  320. uint8_t status);
  321. int avrcp_send_passthrough(struct avrcp *session, uint32_t vendor, uint8_t op);