pinebuds/services/bt_profiles_enhanced/inc/avrcp_i.h

237 lines
7.4 KiB
C

/***************************************************************************
*
* Copyright 2015-2019 BES.
* All rights reserved. All unpublished rights reserved.
*
* No part of this work may be used or reproduced in any form or by any
* means, or stored in a database or retrieval system, without prior written
* permission of BES.
*
* Use of this work is governed by a license granted by BES.
* This work contains confidential and proprietary information of
* BES. which is protected by copyright, trade secret,
* trademark and other intellectual property rights.
*
****************************************************************************/
#ifndef __AVRCP_I_H__
#define __AVRCP_I_H__
#include "bt_co_list.h"
#include "btlib_type.h"
#include "btm_i.h"
#include "avctp_i.h"
#include "sdp.h"
#define AVRCP_RECVDATA_BUF_SIZE 48
#define AVRCP_UINT_INFO_IND 0x30
#define AVRCP_SUBUNIT_INFO_IND 0x31
#define AVRCP_PASSTHROUGH_IND 0x7C
#define AVRCP_VENDOR_DEP_IND 0x00
#define AVRCP_RESP_NOT_IMPLEMENTED 0x08
#define AVRCP_RESP_ACCEPT 0x09
#define AVRCP_RESP_REJECT 0x0A
#define AVRCP_RESP_STABLE 0x0C
#define AVRCP_RESP_CHANGED 0x0D
#define AVRCP_RESP_INTERIM 0x0F
#define AVRCP_OP_GET_CAPABILITIES 0x10
#define AVRCP_OP_LIST_PLAYER_SETTING_ATTRIBS 0x11
#define AVRCP_OP_LIST_PLAYER_SETTING_VALUES 0x12
#define AVRCP_OP_GET_PLAYER_SETTING_VALUE 0x13
#define AVRCP_OP_SET_PLAYER_SETTING_VALUE 0x14
#define AVRCP_OP_GET_PLAYER_SETTING_ATTR_TEXT 0x15
#define AVRCP_OP_GET_PLAYER_SETTING_VALUE_TEXT 0x16
#define AVRCP_OP_INFORM_DISP_CHAR_SET 0x17
#define AVRCP_OP_INFORM_BATT_STATUS 0x18
#define AVRCP_OP_GET_MEDIA_INFO 0x20
#define AVRCP_OP_GET_PLAY_STATUS 0x30
#define AVRCP_OP_REGISTER_NOTIFY 0x31
#define AVRCP_OP_REQUEST_CONT_RESP 0x40
#define AVRCP_OP_ABORT_CONT_RESP 0x41
#define AVRCP_OP_SET_ABSOLUTE_VOLUME 0x50
#define AVRCP_OP_SET_ADDRESSED_PLAYER 0x60
#define AVRCP_OP_SET_BROWSED_PLAYER 0x70
#define AVRCP_OP_GET_FOLDER_ITEMS 0x71
#define AVRCP_OP_CHANGE_PATH 0x72
#define AVRCP_OP_GET_ITEM_ATTRIBUTES 0x73
#define AVRCP_OP_PLAY_ITEM 0x74
#define AVRCP_OP_SEARCH 0x80
#define AVRCP_OP_ADD_TO_NOW_PLAYING 0x90
#define AVRCP_OP_GENERAL_REJECT 0xA0
#define AVRCP_OP_CUSTOM_CMD 0xF0
enum avrcp_role_enum {
AVRCP_MASTER,
AVRCP_SLAVE
};
enum avrcp_event_t {
// AVRCP_TURN_ON = 1,
// AVRCP_TURN_OFF,
AVRCP_PLAY_REQ = 1, //241
AVRCP_PAUSE_REQ,
AVRCP_STOP_REQ,
AVRCP_RECORD_REQ,
AVRCP_FORWARD_REQ,
AVRCP_BACKWARD_REQ,
AVRCP_FAST_FORWARD_START_REQ,
AVRCP_FAST_BACKWARD_START_REQ,
AVRCP_FF_FB_STOP_REQ,
AVRCP_CONN_REQ, //250
AVRCP_DISCONN_REQ,
// AV_C_EVNT_BEGIN,
AVRCP_CHANNEL_OPENED,
AVRCP_CHANNEL_NEW_OPEN,
AVRCP_CHANNEL_CLOSED,
AVRCP_CHANNEL_TX_HANDLED,
AVRCP_CHANNEL_RESPONSE,
AVRCP_CHANNEL_COMMAND,
AVRCP_CHANNEL_DATA_IND,
AVRCP_RESPONSE //no more than 15
};
enum avrcp_state_enum {
AVRCP_STOP,
AVRCP_STANDBY = 1, //ready
AVRCP_QUERING,
AVRCP_CONNECTING,
AVRCP_CONNECTED
// AVRCP_BUSY
};
enum music_state_enum {
MUSIC_NO_ACTION,
MUSIC_PLAYING,
MUSIC_PAUSE,
MUSIC_RESUME,
MUSIC_STOP
};
struct avrcp_control_t {
struct list_node node;
struct avctp_control_t avctp_ctl;
enum avrcp_role_enum role;
struct bdaddr_t remote;
enum avrcp_state_enum state;
uint32 handle;
uint8 op_code;
uint8 op_id;
struct avctp_frame_t pnl_cmd;
struct avctp_frame_t adv_cmd;
struct avctp_frame_t adv_rsp;
struct avctp_frame_t unitinfo_cmd;
struct avctp_frame_t subunitinfo_cmd;
uint8 pnl_cmd_buff[64];
uint8 adv_cmd_buff[128];
uint8 adv_rsp_buff[128];
uint8 unitinfo_cmd_buff[64];
uint8 is_src_playing;
uint8 is_volume_sync;
void (*indicate) (struct avrcp_control_t *avrcp_ctl, uint8 event, void *pdata);
void (*data_cb) (struct avrcp_control_t *avrcp_ctl, struct pp_buff *ppb);
struct sdp_request sdp_request;
uint16 remote_avctp_version;
uint16 remote_avrcp_version;
uint16 remote_support_features;
bool conn_avctp_after_sdp;
};
struct avrcp_advanced_cmd_pdu {
struct list_node node;
uint8 op;
U16 parm_len;
U8 *parms;
U8 trans_id;
BOOL more;
U16 cur_len;
U16 bytes_to_send;
U8 cont_op;
BOOL abort;
BOOL internal;
U8 response;
U8 error;
BOOL is_cmd;
U8 ctype; /* 4 bits */
};
struct avrcp_adv_cmd_rsp_cb_parms {
uint8 rsp;
uint8 subunit_type;
uint8 subunit_id;
uint8 op_code;
uint8 *origin_data;
uint8 *op_data;
uint16 op_data_len;
};
struct avrcp_adv_cmd_cb_parms {
uint8 ctype;
uint8 subunit_type;
uint8 subunit_id;
uint8 op_code;
uint8 *origin_data;
uint8 *op_data;
uint16 op_data_len;
};
struct avrcp_ctx_input {
struct ctx_content ctx;
struct bdaddr_t *remote;
struct avrcp_control_t *avrcp_ctl;
};
struct avrcp_ctx_output {
};
#if defined(__cplusplus)
extern "C" {
#endif
/* AVRCP APP */
void app_callback(uint8 event, void *pdata);
/* AVRCP */
int8 avrcp_init_inst(struct avrcp_control_t *avrcp_ctl, void (*indicate) (struct avrcp_control_t *avrcp_ctl, uint8 event, void *pdata),
void (*datarecv_callback) (struct avrcp_control_t *avrcp_ctl, struct pp_buff *ppb));
enum avrcp_state_enum avrcp_getState(struct avrcp_control_t *avrcp_ctl);
void avrcp_setState(struct avrcp_control_t *avrcp_ctl, enum avrcp_state_enum state);
int8 avrcp_turnOn(struct avrcp_control_t *avrcp_ctl);
int8 avrcp_turnOff(struct avrcp_control_t *avrcp_ctl);
int8 avrcp_connectReq(struct avrcp_control_t *avrcp_ctl, struct bdaddr_t *peer);
int8 avrcp_disconnectReq(struct avrcp_control_t *avrcp_ctl);
int8 avrcp_send_cmd(struct avrcp_control_t *avrcp_ctl, int op);
/* Used by Controller to Send Command */
bool avrcp_is_advanced_command_can_send(struct avrcp_control_t * avrcp_ctl, bool is_cmd);
int8 avrcp_send_advanced_command(struct avrcp_control_t *avrcp_ctl, struct avrcp_advanced_cmd_pdu *pdu);
int8 avrcp_send_advanced_response(struct avrcp_control_t *avrcp_ctl, struct avrcp_advanced_cmd_pdu *pdu);
int8 avrcp_send_panel_key(struct avrcp_control_t *avrcp_ctl, uint16 op, uint8 press);
bool avrcp_is_control_channel_connected(struct avrcp_control_t *avrcp_ctl);
int8 avrcp_is_panel_cmd_can_send(struct avrcp_control_t *avrcp_ctl);
int8 avrcp_send_panel_response(struct avrcp_control_t *avrcp_ctl, uint16 op, uint8 press, uint8 response);
int8 avrcp_send_unit_info_cmd(struct avrcp_control_t *avrcp_ctl);
int8 avrcp_send_unit_info_response(struct avrcp_control_t *avrcp_ctl);
int8 avrcp_send_subunit_info_response(struct avrcp_control_t *avrcp_ctl);
void avrcp_register_panel_command_tx_handled_callback(void (*cb)(struct avrcp_control_t *avrcp_ctl, void *pdata));
struct avctp_control_t *avrcp_get_avctp_control(struct avrcp_control_t *avrcp_ctl);
uint16 avrcp_get_conn_handle(struct avrcp_control_t* avrcp_ctl);
uint32 avrcp_save_ctx(struct avrcp_control_t *avrcp_ctl, uint8_t *buf, uint32_t buf_len);
uint32 avrcp_restore_ctx(struct avrcp_ctx_input *input, struct avrcp_ctx_output *output);
#if defined(__cplusplus)
}
#endif
#endif /* __AVRCP_I_H__ */