bluez/mesh/mesh-io.h
Brian Gix 6a6fe856a9 mesh: rework incoming advertisement filtering
Future versions of Mesh will introduce new advertising packets, which
do not fit in the limited and rigid filtering currently used. This minor
rewrite allows registering and receiving of *any* AD types, including
the filtering on multiple octets of the incoming AD parts.
2020-02-26 11:20:08 -08:00

101 lines
2.4 KiB
C

/*
*
* BlueZ - Bluetooth protocol stack for Linux
*
* Copyright (C) 2018 Intel Corporation. All rights reserved.
*
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
*/
struct mesh_io;
#define MESH_IO_TX_COUNT_UNLIMITED 0
enum mesh_io_type {
MESH_IO_TYPE_NONE = 0,
MESH_IO_TYPE_GENERIC
};
enum mesh_io_timing_type {
MESH_IO_TIMING_TYPE_GENERAL = 1,
MESH_IO_TIMING_TYPE_POLL,
MESH_IO_TIMING_TYPE_POLL_RSP
};
struct mesh_io_recv_info {
const uint8_t *addr;
uint32_t instant;
uint8_t chan;
int8_t rssi;
};
struct mesh_io_send_info {
enum mesh_io_timing_type type;
union {
struct {
uint16_t interval;
uint8_t cnt;
uint8_t min_delay;
uint8_t max_delay;
} gen;
struct {
uint16_t scan_duration;
uint8_t scan_delay;
uint8_t filter_ids[2];
uint8_t min_delay;
uint8_t max_delay;
} poll;
struct {
uint32_t instant;
uint8_t delay;
} poll_rsp;
} u;
};
struct mesh_io_caps {
uint8_t max_num_filters;
uint8_t window_accuracy;
};
typedef void (*mesh_io_recv_func_t)(void *user_data,
struct mesh_io_recv_info *info,
const uint8_t *data, uint16_t len);
typedef void (*mesh_io_recv_ext_func_t)(void *user_data,
struct mesh_io_recv_info *info,
const uint8_t *data, uint16_t len,
const uint8_t *addr);
typedef void (*mesh_io_ready_func_t)(void *user_data, bool result);
struct mesh_io *mesh_io_new(enum mesh_io_type type, void *opts,
mesh_io_ready_func_t cb, void *user_data);
void mesh_io_destroy(struct mesh_io *io);
bool mesh_io_get_caps(struct mesh_io *io, struct mesh_io_caps *caps);
bool mesh_io_register_recv_cb(struct mesh_io *io, const uint8_t *filter,
uint8_t len, mesh_io_recv_func_t cb,
void *user_data);
bool mesh_io_deregister_recv_cb(struct mesh_io *io, const uint8_t *filter,
uint8_t len);
bool mesh_io_send(struct mesh_io *io, struct mesh_io_send_info *info,
const uint8_t *data, uint16_t len);
bool mesh_io_send_cancel(struct mesh_io *io, const uint8_t *pattern,
uint8_t len);