105f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach/* 205f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach * Copyright (C) 2012 The Android Open Source Project 305f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach * 405f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach * Licensed under the Apache License, Version 2.0 (the "License"); 505f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach * you may not use this file except in compliance with the License. 605f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach * You may obtain a copy of the License at 705f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach * 805f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach * http://www.apache.org/licenses/LICENSE-2.0 905f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach * 1005f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach * Unless required by applicable law or agreed to in writing, software 1105f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach * distributed under the License is distributed on an "AS IS" BASIS, 1205f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1305f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach * See the License for the specific language governing permissions and 1405f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach * limitations under the License. 1505f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach */ 1605f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach 1705f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach#ifndef ANDROID_INCLUDE_BT_HL_H 1805f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach#define ANDROID_INCLUDE_BT_HL_H 1905f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach 2005f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach__BEGIN_DECLS 2105f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach 2205f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach/* HL connection states */ 2305f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach 2405f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbachtypedef enum 2505f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach{ 2605f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach BTHL_MDEP_ROLE_SOURCE, 2705f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach BTHL_MDEP_ROLE_SINK 2805f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach} bthl_mdep_role_t; 2905f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach 3005f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbachtypedef enum { 3105f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach BTHL_APP_REG_STATE_REG_SUCCESS, 3205f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach BTHL_APP_REG_STATE_REG_FAILED, 3305f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach BTHL_APP_REG_STATE_DEREG_SUCCESS, 3405f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach BTHL_APP_REG_STATE_DEREG_FAILED 3505f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach} bthl_app_reg_state_t; 3605f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach 3705f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbachtypedef enum 3805f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach{ 3905f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach BTHL_CHANNEL_TYPE_RELIABLE, 4005f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach BTHL_CHANNEL_TYPE_STREAMING, 4105f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach BTHL_CHANNEL_TYPE_ANY 4205f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach} bthl_channel_type_t; 4305f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach 4405f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach 4505f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach/* HL connection states */ 4605f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbachtypedef enum { 4705f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach BTHL_CONN_STATE_CONNECTING, 4805f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach BTHL_CONN_STATE_CONNECTED, 4905f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach BTHL_CONN_STATE_DISCONNECTING, 5005f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach BTHL_CONN_STATE_DISCONNECTED, 5105f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach BTHL_CONN_STATE_DESTROYED 5205f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach} bthl_channel_state_t; 5305f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach 5405f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbachtypedef struct 5505f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach{ 5605f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach bthl_mdep_role_t mdep_role; 5705f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach int data_type; 5805f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach bthl_channel_type_t channel_type; 5905f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach const char *mdep_description; /* MDEP description to be used in the SDP (optional); null terminated */ 6005f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach} bthl_mdep_cfg_t; 6105f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach 6205f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbachtypedef struct 6305f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach{ 6405f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach const char *application_name; 6505f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach const char *provider_name; /* provider name to be used in the SDP (optional); null terminated */ 6605f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach const char *srv_name; /* service name to be used in the SDP (optional); null terminated*/ 6705f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach const char *srv_desp; /* service description to be used in the SDP (optional); null terminated */ 6805f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach int number_of_mdeps; 6905f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach bthl_mdep_cfg_t *mdep_cfg; /* Dynamic array */ 7005f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach} bthl_reg_param_t; 7105f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach 7205f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach/** Callback for application registration status. 7305f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach * state will have one of the values from bthl_app_reg_state_t 7405f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach */ 7505f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbachtypedef void (* bthl_app_reg_state_callback)(int app_id, bthl_app_reg_state_t state); 7605f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach 7705f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach/** Callback for channel connection state change. 7805f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach * state will have one of the values from 7905f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach * bthl_connection_state_t and fd (file descriptor) 8005f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach */ 8105f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbachtypedef void (* bthl_channel_state_callback)(int app_id, bt_bdaddr_t *bd_addr, int mdep_cfg_index, int channel_id, bthl_channel_state_t state, int fd); 8205f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach 8305f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach/** BT-HL callback structure. */ 8405f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbachtypedef struct { 8505f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach /** set to sizeof(bthl_callbacks_t) */ 8605f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach size_t size; 8705f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach bthl_app_reg_state_callback app_reg_state_cb; 8805f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach bthl_channel_state_callback channel_state_cb; 8905f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach} bthl_callbacks_t; 9005f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach 9105f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach 9205f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach/** Represents the standard BT-HL interface. */ 9305f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbachtypedef struct { 9405f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach 9505f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach /** set to sizeof(bthl_interface_t) */ 9605f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach size_t size; 9705f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach 9805f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach /** 9905f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach * Register the Bthl callbacks 10005f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach */ 10105f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach bt_status_t (*init)( bthl_callbacks_t* callbacks ); 10205f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach 10305f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach /** Register HL application */ 10405f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach bt_status_t (*register_application) ( bthl_reg_param_t *p_reg_param, int *app_id); 10505f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach 10605f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach /** Unregister HL application */ 10705f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach bt_status_t (*unregister_application) (int app_id); 10805f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach 10905f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach /** connect channel */ 11005f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach bt_status_t (*connect_channel)(int app_id, bt_bdaddr_t *bd_addr, int mdep_cfg_index, int *channel_id); 11105f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach 11205f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach /** destroy channel */ 11305f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach bt_status_t (*destroy_channel)(int channel_id); 11405f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach 11505f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach /** Close the Bthl callback **/ 11605f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach void (*cleanup)(void); 11705f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach 11805f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach} bthl_interface_t; 11905f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach__END_DECLS 12005f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach 12105f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach#endif /* ANDROID_INCLUDE_BT_HL_H */ 12205f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach 12305f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach 124