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_PAN_H
1805f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach#define ANDROID_INCLUDE_BT_PAN_H
1905f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach
2005f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach__BEGIN_DECLS
2105f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach
2205f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach#define BTPAN_ROLE_NONE      0
2305f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach#define BTPAN_ROLE_PANNAP    1
2405f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach#define BTPAN_ROLE_PANU      2
2505f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach
2605f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbachtypedef enum {
2705f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach    BTPAN_STATE_CONNECTED       = 0,
2805f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach    BTPAN_STATE_CONNECTING      = 1,
2905f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach    BTPAN_STATE_DISCONNECTED    = 2,
3005f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach    BTPAN_STATE_DISCONNECTING   = 3
3105f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach} btpan_connection_state_t;
3205f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach
3305f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbachtypedef enum {
3405f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach    BTPAN_STATE_ENABLED = 0,
3505f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach    BTPAN_STATE_DISABLED = 1
3605f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach} btpan_control_state_t;
3705f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach
3805f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach/**
3905f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach* Callback for pan connection state
4005f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach*/
4105f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbachtypedef void (*btpan_connection_state_callback)(btpan_connection_state_t state, bt_status_t error,
4205f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach                                                const bt_bdaddr_t *bd_addr, int local_role, int remote_role);
4305f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbachtypedef void (*btpan_control_state_callback)(btpan_control_state_t state, bt_status_t error,
4405f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach                                            int local_role, const char* ifname);
4505f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach
4605f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbachtypedef struct {
4705f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach    size_t size;
4805f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach    btpan_control_state_callback control_state_cb;
4905f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach    btpan_connection_state_callback connection_state_cb;
5005f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach} btpan_callbacks_t;
5105f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbachtypedef struct {
5205f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach    /** set to size of this struct*/
5305f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach    size_t          size;
5405f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach    /**
5505f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach     * Initialize the pan interface and register the btpan callbacks
5605f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach     */
5705f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach    bt_status_t (*init)(const btpan_callbacks_t* callbacks);
5805f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach    /*
5905f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach     * enable the pan service by specified role. The result state of
6005f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach     * enabl will be returned by btpan_control_state_callback. when pan-nap is enabled,
6105f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach     * the state of connecting panu device will be notified by btpan_connection_state_callback
6205f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach     */
6305f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach    bt_status_t (*enable)(int local_role);
6405f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach    /*
6505f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach     * get current pan local role
6605f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach     */
6705f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach    int (*get_local_role)(void);
6805f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach    /**
6905f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach     * start bluetooth pan connection to the remote device by specified pan role. The result state will be
7005f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach     * returned by btpan_connection_state_callback
7105f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach     */
7205f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach    bt_status_t (*connect)(const bt_bdaddr_t *bd_addr, int local_role, int remote_role);
7305f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach    /**
7405f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach     * stop bluetooth pan connection. The result state will be returned by btpan_connection_state_callback
7505f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach     */
7605f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach    bt_status_t (*disconnect)(const bt_bdaddr_t *bd_addr);
7705f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach
7805f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach    /**
7905f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach     * Cleanup the pan interface
8005f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach     */
8105f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach    void (*cleanup)(void);
8205f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach
8305f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach} btpan_interface_t;
8405f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach
8505f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach__END_DECLS
8605f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach
8705f49546a9c70805cbd77e71c7998652f91ec535Andre Eisenbach#endif /* ANDROID_INCLUDE_BT_PAN_H */
88