`bt_conn_le_create` returns a signed value. Error message format string expects an unsigned value. This commit changes the expected value in the format string to a signed one, to match what `bt_conn_le_create` returns. Signed-off-by: Filip Kokosinski <fkokosinski@antmicro.com>
139 lines
2.6 KiB
C
139 lines
2.6 KiB
C
/* main.c - Application main entry point */
|
|
|
|
/*
|
|
* Copyright (c) 2015-2016 Intel Corporation
|
|
*
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
*/
|
|
|
|
#include <zephyr/types.h>
|
|
#include <stddef.h>
|
|
#include <errno.h>
|
|
#include <zephyr/kernel.h>
|
|
#include <zephyr/sys/printk.h>
|
|
|
|
#include <zephyr/bluetooth/bluetooth.h>
|
|
#include <zephyr/bluetooth/hci.h>
|
|
#include <zephyr/bluetooth/conn.h>
|
|
#include <zephyr/bluetooth/uuid.h>
|
|
#include <zephyr/bluetooth/gatt.h>
|
|
#include <zephyr/sys/byteorder.h>
|
|
|
|
static void start_scan(void);
|
|
|
|
static struct bt_conn *default_conn;
|
|
|
|
static void device_found(const bt_addr_le_t *addr, int8_t rssi, uint8_t type,
|
|
struct net_buf_simple *ad)
|
|
{
|
|
char addr_str[BT_ADDR_LE_STR_LEN];
|
|
int err;
|
|
|
|
if (default_conn) {
|
|
return;
|
|
}
|
|
|
|
/* We're only interested in connectable events */
|
|
if (type != BT_GAP_ADV_TYPE_ADV_IND &&
|
|
type != BT_GAP_ADV_TYPE_ADV_DIRECT_IND) {
|
|
return;
|
|
}
|
|
|
|
bt_addr_le_to_str(addr, addr_str, sizeof(addr_str));
|
|
printk("Device found: %s (RSSI %d)\n", addr_str, rssi);
|
|
|
|
/* connect only to devices in close proximity */
|
|
if (rssi < -70) {
|
|
return;
|
|
}
|
|
|
|
if (bt_le_scan_stop()) {
|
|
return;
|
|
}
|
|
|
|
err = bt_conn_le_create(addr, BT_CONN_LE_CREATE_CONN,
|
|
BT_LE_CONN_PARAM_DEFAULT, &default_conn);
|
|
if (err) {
|
|
printk("Create conn to %s failed (%d)\n", addr_str, err);
|
|
start_scan();
|
|
}
|
|
}
|
|
|
|
static void start_scan(void)
|
|
{
|
|
int err;
|
|
|
|
/* This demo doesn't require active scan */
|
|
err = bt_le_scan_start(BT_LE_SCAN_PASSIVE, device_found);
|
|
if (err) {
|
|
printk("Scanning failed to start (err %d)\n", err);
|
|
return;
|
|
}
|
|
|
|
printk("Scanning successfully started\n");
|
|
}
|
|
|
|
static void connected(struct bt_conn *conn, uint8_t err)
|
|
{
|
|
char addr[BT_ADDR_LE_STR_LEN];
|
|
|
|
bt_addr_le_to_str(bt_conn_get_dst(conn), addr, sizeof(addr));
|
|
|
|
if (err) {
|
|
printk("Failed to connect to %s (%u)\n", addr, err);
|
|
|
|
bt_conn_unref(default_conn);
|
|
default_conn = NULL;
|
|
|
|
start_scan();
|
|
return;
|
|
}
|
|
|
|
if (conn != default_conn) {
|
|
return;
|
|
}
|
|
|
|
printk("Connected: %s\n", addr);
|
|
|
|
bt_conn_disconnect(conn, BT_HCI_ERR_REMOTE_USER_TERM_CONN);
|
|
}
|
|
|
|
static void disconnected(struct bt_conn *conn, uint8_t reason)
|
|
{
|
|
char addr[BT_ADDR_LE_STR_LEN];
|
|
|
|
if (conn != default_conn) {
|
|
return;
|
|
}
|
|
|
|
bt_addr_le_to_str(bt_conn_get_dst(conn), addr, sizeof(addr));
|
|
|
|
printk("Disconnected: %s (reason 0x%02x)\n", addr, reason);
|
|
|
|
bt_conn_unref(default_conn);
|
|
default_conn = NULL;
|
|
|
|
start_scan();
|
|
}
|
|
|
|
BT_CONN_CB_DEFINE(conn_callbacks) = {
|
|
.connected = connected,
|
|
.disconnected = disconnected,
|
|
};
|
|
|
|
int main(void)
|
|
{
|
|
int err;
|
|
|
|
err = bt_enable(NULL);
|
|
if (err) {
|
|
printk("Bluetooth init failed (err %d)\n", err);
|
|
return 0;
|
|
}
|
|
|
|
printk("Bluetooth initialized\n");
|
|
|
|
start_scan();
|
|
return 0;
|
|
}
|