/******************************************************************************
 *
 *  Copyright (C) 2014 Google, Inc.
 *
 *  Licensed under the Apache License, Version 2.0 (the "License");
 *  you may not use this file except in compliance with the License.
 *  You may obtain a copy of the License at:
 *
 *  http://www.apache.org/licenses/LICENSE-2.0
 *
 *  Unless required by applicable law or agreed to in writing, software
 *  distributed under the License is distributed on an "AS IS" BASIS,
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  See the License for the specific language governing permissions and
 *  limitations under the License.
 *
 ******************************************************************************/

#include "base.h"
#include "support/callbacks.h"
#include "support/pan.h"

const btpan_interface_t *pan_interface;

static btpan_control_state_t pan_control_state;
static btpan_connection_state_t pan_connection_state;
static int pan_local_role;
static int pan_remote_role;
static bt_status_t pan_error;
static char *pan_ifname;

bool pan_init() {
  pan_interface = bt_interface->get_profile_interface(BT_PROFILE_PAN_ID);
  return pan_interface->init(callbacks_get_pan_struct()) == BT_STATUS_SUCCESS;
}

btpan_control_state_t pan_get_control_state() {
  return pan_control_state;
}

btpan_connection_state_t pan_get_connection_state() {
  return pan_connection_state;
}

int pan_get_local_role() {
  return pan_local_role;
}

int pan_get_remote_role() {
  return pan_remote_role;
}

bt_status_t pan_get_error() {
  return pan_error;
}

// callback
void pan_control_state_changed(btpan_control_state_t state, int local_role, bt_status_t error, const char *ifname) {
  free(pan_ifname);

  pan_control_state = state;
  pan_local_role = local_role;
  pan_error = error;
  pan_ifname = strdup(ifname);

  CALLBACK_RET();
}

// callback
void pan_connection_state_changed(btpan_connection_state_t state, bt_status_t error, const bt_bdaddr_t *bd_addr, int local_role, int remote_role) {
  pan_connection_state = state;
  pan_error = error;
  pan_local_role = local_role;
  pan_remote_role = remote_role;
  CALLBACK_RET();
}
