99 lines
3.3 KiB
C
99 lines
3.3 KiB
C
/****************************************************************************
|
|
* Copyright (C) 2022 Xiaomi Corporation
|
|
*
|
|
* 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 <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
|
|
#include "bluetooth.h"
|
|
#include "bt_adapter.h"
|
|
#include "utils.h"
|
|
|
|
static void on_adapter_state_changed_cb(void* cookie, bt_adapter_state_t state)
|
|
{
|
|
printf("Context:%p, Adapter state changed: %d\n", cookie, state);
|
|
}
|
|
|
|
static void on_discovery_state_changed_cb(void* cookie, bt_discovery_state_t state)
|
|
{
|
|
printf("Discovery state: %s\n", state == BT_DISCOVERY_STATE_STARTED ? "Started" : "Stopped");
|
|
}
|
|
|
|
static void on_discovery_result_cb(void* cookie, bt_discovery_result_t* result)
|
|
{
|
|
char addr_str[BT_ADDR_STR_LENGTH] = { 0 };
|
|
bt_addr_ba2str(&result->addr, addr_str);
|
|
printf("Inquiring: device [%s], name: %s, cod: %08" PRIx32 ", rssi: %d\n", addr_str, result->name, result->cod, result->rssi);
|
|
}
|
|
|
|
static void on_scan_mode_changed_cb(void* cookie, bt_scan_mode_t mode)
|
|
{
|
|
printf("Adapter new scan mode: %d\n", mode);
|
|
}
|
|
|
|
static void on_device_name_changed_cb(void* cookie, const char* device_name)
|
|
{
|
|
printf("Adapter update device name: %s\n", device_name);
|
|
}
|
|
|
|
const static adapter_callbacks_t g_adapter_cbs = {
|
|
.on_adapter_state_changed = on_adapter_state_changed_cb,
|
|
.on_discovery_state_changed = on_discovery_state_changed_cb,
|
|
.on_discovery_result = on_discovery_result_cb,
|
|
.on_scan_mode_changed = on_scan_mode_changed_cb,
|
|
.on_device_name_changed = on_device_name_changed_cb,
|
|
.on_pair_request = NULL,
|
|
.on_pair_display = NULL,
|
|
.on_connection_state_changed = NULL,
|
|
.on_bond_state_changed = NULL,
|
|
.on_remote_name_changed = NULL,
|
|
.on_remote_alias_changed = NULL,
|
|
.on_remote_cod_changed = NULL,
|
|
.on_remote_uuids_changed = NULL,
|
|
};
|
|
|
|
int main(int argc, char** argv)
|
|
{
|
|
bt_instance_t* ins = NULL;
|
|
static void* adapter_callback = NULL;
|
|
|
|
ins = bluetooth_create_instance();
|
|
if (ins == NULL) {
|
|
printf("create instance error\n");
|
|
return -1;
|
|
}
|
|
printf("create instance success\n");
|
|
adapter_callback = bt_adapter_register_callback(ins, &g_adapter_cbs);
|
|
if (adapter_callback == NULL) {
|
|
bluetooth_delete_instance(ins);
|
|
printf("register callback error\n");
|
|
return -1;
|
|
}
|
|
printf("register callback success\n");
|
|
bt_adapter_state_t state = bt_adapter_get_state(ins);
|
|
printf("adapter state: %d\n", state);
|
|
|
|
sleep(10);
|
|
if (!bt_adapter_unregister_callback(ins, adapter_callback)) {
|
|
printf("unregister callback error\n");
|
|
} else {
|
|
printf("unregister callback success\n");
|
|
}
|
|
bluetooth_delete_instance(ins);
|
|
printf("btclient exited\n");
|
|
|
|
return 0;
|
|
}
|