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