237 lines
7.4 KiB
C
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__ */ |