/** AVRCP Controller callback structure. */
static btrc_ctrl_callbacks_t avrcp_ct_cb = {
- /** set to sizeof(BtRcCallbacks) */
- sizeof(avrcp_ct_cb),
- cb_avrcp_ct_btrc_passthrough_rsp,
- NULL, //cb_avrcp_ct_btrc_groupnavigation_rsp,
- cb_avrcp_ct_connection_state,
- NULL,/*btrc_ct_getrcfeatures_callback*/
- cb_avrcp_ct_btrc_setplayerapplicationsetting_rsp,
- NULL, /*btrc_ct_playerapplicationsetting_callback*/
- cb_avrcp_ct_btrc_playerapplicationsetting_changed,
- NULL, /*btrc_ct_setabsvol_cmd_callback*/
- NULL, /*btrc_ct_registernotification_abs_vol_callback*/
- cb_avrcp_ct_trak_info_chnaged,
- cb_avrcp_ct_btrc_play_position_changed,
- cb_avrcp_ct_btrc_play_status_changed,
- NULL, /*btrc_ct_get_folder_items_callback*/
- NULL, /*btrc_ct_change_path_callback*/
- NULL, /*btrc_ct_set_browsed_player_callback*/
- NULL /*btrc_ct_set_addressed_player_callback*/
+ .size = sizeof(avrcp_ct_cb),
+ .passthrough_rsp_cb = cb_avrcp_ct_btrc_passthrough_rsp,
+ .groupnavigation_rsp_cb = NULL,
+ .connection_state_cb = cb_avrcp_ct_connection_state,
+ .getrcfeatures_cb = NULL,
+ .setplayerappsetting_rsp_cb = cb_avrcp_ct_btrc_setplayerapplicationsetting_rsp,
+ .playerapplicationsetting_cb = NULL,
+ .playerapplicationsetting_changed_cb = cb_avrcp_ct_btrc_playerapplicationsetting_changed,
+ .setabsvol_cmd_cb = NULL,
+ .registernotification_absvol_cb = NULL,
+ .track_changed_cb = cb_avrcp_ct_trak_info_chnaged,
+ .play_position_changed_cb = cb_avrcp_ct_btrc_play_position_changed,
+ .play_status_changed_cb = cb_avrcp_ct_btrc_play_status_changed,
+ .get_folder_items_cb = NULL,
+ .change_folder_path_cb = NULL,
+ .set_browsed_player_cb = NULL,
+ .set_addressed_player_cb = NULL
};
static void __add_device_to_avrcp_list(bt_address_t *address)
break;
default:
event = OAL_EVENT_END;
+ g_free(event_data);
break;
}
event_data, sizeof(avrcp_ct_pass_cmd_t));
} else {
BT_ERR("Invalid pass through command key code");
+ g_free(event_data);
}
}
track_info->total_track = g_ascii_strtoll(
(const gchar *)p_attrs[idx].text, NULL, 10);
event_data->total_track = track_info->total_track;
- } else {
- BT_WARN("string is null!!!!!!!");
}
break;
case BTRC_MEDIA_ATTR_ID_TRACK_NUM:
track_info->track_number = g_ascii_strtoll(
(const gchar *)p_attrs[idx].text, NULL, 10);
event_data->track_number = track_info->track_number;
- } else {
- BT_WARN("string is null!!!!!!!");
}
break;
case BTRC_MEDIA_ATTR_ID_PLAYING_TIME:
- if (p_attrs[idx].text != NULL) {
track_info->playing_time = g_ascii_strtoll(
(const gchar *)p_attrs[idx].text, NULL, 10);
- event_data->playing_time = track_info->playing_time;
- } else {
- BT_WARN("string is null!!!!!!!");
- }
+ event_data->playing_time = (uint64_t) track_info->playing_time;
break;
default:
break;
return result;
}
+oal_status_t avrcp_ct_volume_up(bt_address_t *device_address)
+{
+ oal_status_t result = OAL_STATUS_SUCCESS;
+
+ API_TRACE();
+
+ result = __avrcp_ct_send_pass_through_cmd(device_address,
+ OAL_RC_PASS_CMD_VOLUME_UP, PRESS_STATE);
+
+ return result;
+}
+
+oal_status_t avrcp_ct_volume_down(bt_address_t *device_address)
+{
+ oal_status_t result = OAL_STATUS_SUCCESS;
+
+ API_TRACE();
+
+ result = __avrcp_ct_send_pass_through_cmd(device_address,
+ OAL_RC_PASS_CMD_VOLUME_DOWN, PRESS_STATE);
+
+ return result;
+}
+
oal_status_t avrcp_ct_fforward(bt_address_t *device_address, avrcp_ct_pass_state_t press_state)
{
oal_status_t result = OAL_STATUS_SUCCESS;
return result;
}
+oal_status_t avrcp_transport_set_property(bt_address_t *device_address, int type, unsigned int value)
+{
+ int result = OAL_STATUS_SUCCESS;
+ bt_status_t status;
+ bdstr_t bdstr;
+
+ API_TRACE();
+
+ CHECK_OAL_AVRCP_CTRL_ENABLED();
+ BT_INFO("BT Audio Address: %s", bdt_bd2str(device_address, &bdstr));
+
+ if (type) {
+ status = avrcp_ct_interface->set_transport_setting_cmd((bt_bdaddr_t *)device_address, NO_OF_ATTRIBUTE,
+ &type, &value);
+ if ((status != BT_STATUS_SUCCESS) && (status != BT_STATUS_DONE)) {
+ BT_ERR("OAL, Set property failed err: %s", status2string(status));
+ result = convert_to_oal_status(status);
+ }
+ } else {
+ result = OAL_STATUS_INTERNAL_ERROR;
+ }
+ return result;
+}
+
static gboolean __send_avrcp_property_event(gpointer data)
{
avrcp_ct_property_value_t *event_data = (avrcp_ct_property_value_t *)data;
break;
default:
BT_ERR("Invalid Type [%d]", type);
+ g_free(event_data);
return OAL_STATUS_INVALID_PARAM;
}
MEDIA_ATTIRBUTE_STRING_LENGTH);
g_strlcpy((char *)event_data->artist_info, (const char *)track_info->artist_info,
MEDIA_ATTIRBUTE_STRING_LENGTH);
- event_data->playing_time = track_info->playing_time;
+ event_data->playing_time = (uint64_t)track_info->playing_time;
event_data->total_track = track_info->total_track;
event_data->track_number = track_info->track_number;