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