mirror of
https://github.com/Ralim/IronOS.git
synced 2025-02-26 07:53:55 +00:00
Merge pull request #1567 from Ralim/ble-settings-reset
BLE Settings rename + Unique Name
This commit is contained in:
@@ -1,65 +1,71 @@
|
|||||||
/** @file
|
/** @file
|
||||||
* @brief Internal APIs for Bluetooth connection handling.
|
* @brief Internal APIs for Bluetooth connection handling.
|
||||||
*/
|
*/
|
||||||
|
#include "addr.h"
|
||||||
|
#include "atomic.h"
|
||||||
|
#include "slist.h"
|
||||||
|
#include "types.h"
|
||||||
|
#include "work_q.h"
|
||||||
|
#include <stddef.h>
|
||||||
|
#include <stdint.h>
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2015 Intel Corporation
|
* Copyright (c) 2015 Intel Corporation
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: Apache-2.0
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
*/
|
*/
|
||||||
typedef enum __packed {
|
typedef enum __packed {
|
||||||
BT_CONN_DISCONNECTED,
|
BT_CONN_DISCONNECTED,
|
||||||
BT_CONN_CONNECT_SCAN,
|
BT_CONN_CONNECT_SCAN,
|
||||||
BT_CONN_CONNECT_DIR_ADV,
|
BT_CONN_CONNECT_DIR_ADV,
|
||||||
BT_CONN_CONNECT,
|
BT_CONN_CONNECT,
|
||||||
BT_CONN_CONNECTED,
|
BT_CONN_CONNECTED,
|
||||||
BT_CONN_DISCONNECT,
|
BT_CONN_DISCONNECT,
|
||||||
} bt_conn_state_t;
|
} bt_conn_state_t;
|
||||||
|
|
||||||
/* bt_conn flags: the flags defined here represent connection parameters */
|
/* bt_conn flags: the flags defined here represent connection parameters */
|
||||||
enum {
|
enum {
|
||||||
BT_CONN_AUTO_CONNECT,
|
BT_CONN_AUTO_CONNECT,
|
||||||
BT_CONN_BR_LEGACY_SECURE, /* 16 digits legacy PIN tracker */
|
BT_CONN_BR_LEGACY_SECURE, /* 16 digits legacy PIN tracker */
|
||||||
BT_CONN_USER, /* user I/O when pairing */
|
BT_CONN_USER, /* user I/O when pairing */
|
||||||
BT_CONN_BR_PAIRING, /* BR connection in pairing context */
|
BT_CONN_BR_PAIRING, /* BR connection in pairing context */
|
||||||
BT_CONN_BR_NOBOND, /* SSP no bond pairing tracker */
|
BT_CONN_BR_NOBOND, /* SSP no bond pairing tracker */
|
||||||
BT_CONN_BR_PAIRING_INITIATOR, /* local host starts authentication */
|
BT_CONN_BR_PAIRING_INITIATOR, /* local host starts authentication */
|
||||||
BT_CONN_CLEANUP, /* Disconnected, pending cleanup */
|
BT_CONN_CLEANUP, /* Disconnected, pending cleanup */
|
||||||
BT_CONN_AUTO_PHY_UPDATE, /* Auto-update PHY */
|
BT_CONN_AUTO_PHY_UPDATE, /* Auto-update PHY */
|
||||||
BT_CONN_SLAVE_PARAM_UPDATE, /* If slave param update timer fired */
|
BT_CONN_SLAVE_PARAM_UPDATE, /* If slave param update timer fired */
|
||||||
BT_CONN_SLAVE_PARAM_SET, /* If slave param were set from app */
|
BT_CONN_SLAVE_PARAM_SET, /* If slave param were set from app */
|
||||||
BT_CONN_SLAVE_PARAM_L2CAP, /* If should force L2CAP for CPUP */
|
BT_CONN_SLAVE_PARAM_L2CAP, /* If should force L2CAP for CPUP */
|
||||||
BT_CONN_FORCE_PAIR, /* Pairing even with existing keys. */
|
BT_CONN_FORCE_PAIR, /* Pairing even with existing keys. */
|
||||||
|
|
||||||
BT_CONN_AUTO_PHY_COMPLETE, /* Auto-initiated PHY procedure done */
|
BT_CONN_AUTO_PHY_COMPLETE, /* Auto-initiated PHY procedure done */
|
||||||
BT_CONN_AUTO_FEATURE_EXCH, /* Auto-initiated LE Feat done */
|
BT_CONN_AUTO_FEATURE_EXCH, /* Auto-initiated LE Feat done */
|
||||||
BT_CONN_AUTO_VERSION_INFO, /* Auto-initiated LE version done */
|
BT_CONN_AUTO_VERSION_INFO, /* Auto-initiated LE version done */
|
||||||
|
|
||||||
/* Total number of flags - must be at the end of the enum */
|
/* Total number of flags - must be at the end of the enum */
|
||||||
BT_CONN_NUM_FLAGS,
|
BT_CONN_NUM_FLAGS,
|
||||||
};
|
};
|
||||||
|
|
||||||
struct bt_conn_le {
|
struct bt_conn_le {
|
||||||
bt_addr_le_t dst;
|
bt_addr_le_t dst;
|
||||||
|
|
||||||
bt_addr_le_t init_addr;
|
bt_addr_le_t init_addr;
|
||||||
bt_addr_le_t resp_addr;
|
bt_addr_le_t resp_addr;
|
||||||
|
|
||||||
u16_t interval;
|
u16_t interval;
|
||||||
u16_t interval_min;
|
u16_t interval_min;
|
||||||
u16_t interval_max;
|
u16_t interval_max;
|
||||||
|
|
||||||
u16_t latency;
|
u16_t latency;
|
||||||
u16_t timeout;
|
u16_t timeout;
|
||||||
u16_t pending_latency;
|
u16_t pending_latency;
|
||||||
u16_t pending_timeout;
|
u16_t pending_timeout;
|
||||||
|
|
||||||
u8_t features[8];
|
u8_t features[8];
|
||||||
|
|
||||||
struct bt_keys *keys;
|
struct bt_keys *keys;
|
||||||
|
|
||||||
#if defined(CONFIG_BT_STACK_PTS)
|
#if defined(CONFIG_BT_STACK_PTS)
|
||||||
u8_t own_adder_type;
|
u8_t own_adder_type;
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -68,107 +74,107 @@ struct bt_conn_le {
|
|||||||
#define LMP_MAX_PAGES 2
|
#define LMP_MAX_PAGES 2
|
||||||
|
|
||||||
struct bt_conn_br {
|
struct bt_conn_br {
|
||||||
bt_addr_t dst;
|
bt_addr_t dst;
|
||||||
u8_t remote_io_capa;
|
u8_t remote_io_capa;
|
||||||
u8_t remote_auth;
|
u8_t remote_auth;
|
||||||
u8_t pairing_method;
|
u8_t pairing_method;
|
||||||
/* remote LMP features pages per 8 bytes each */
|
/* remote LMP features pages per 8 bytes each */
|
||||||
u8_t features[LMP_MAX_PAGES][8];
|
u8_t features[LMP_MAX_PAGES][8];
|
||||||
|
|
||||||
struct bt_keys_link_key *link_key;
|
struct bt_keys_link_key *link_key;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct bt_conn_sco {
|
struct bt_conn_sco {
|
||||||
/* Reference to ACL Connection */
|
/* Reference to ACL Connection */
|
||||||
struct bt_conn *acl;
|
struct bt_conn *acl;
|
||||||
u16_t pkt_type;
|
u16_t pkt_type;
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
struct bt_conn_iso {
|
struct bt_conn_iso {
|
||||||
/* Reference to ACL Connection */
|
/* Reference to ACL Connection */
|
||||||
struct bt_conn *acl;
|
struct bt_conn *acl;
|
||||||
/* CIG ID */
|
/* CIG ID */
|
||||||
uint8_t cig_id;
|
uint8_t cig_id;
|
||||||
/* CIS ID */
|
/* CIS ID */
|
||||||
uint8_t cis_id;
|
uint8_t cis_id;
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef void (*bt_conn_tx_cb_t)(struct bt_conn *conn, void *user_data);
|
typedef void (*bt_conn_tx_cb_t)(struct bt_conn *conn, void *user_data);
|
||||||
|
|
||||||
struct bt_conn_tx {
|
struct bt_conn_tx {
|
||||||
sys_snode_t node;
|
sys_snode_t node;
|
||||||
|
|
||||||
bt_conn_tx_cb_t cb;
|
bt_conn_tx_cb_t cb;
|
||||||
void *user_data;
|
void *user_data;
|
||||||
|
|
||||||
/* Number of pending packets without a callback after this one */
|
/* Number of pending packets without a callback after this one */
|
||||||
u32_t pending_no_cb;
|
u32_t pending_no_cb;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct bt_conn {
|
struct bt_conn {
|
||||||
u16_t handle;
|
u16_t handle;
|
||||||
u8_t type;
|
u8_t type;
|
||||||
u8_t role;
|
u8_t role;
|
||||||
|
|
||||||
ATOMIC_DEFINE(flags, BT_CONN_NUM_FLAGS);
|
ATOMIC_DEFINE(flags, BT_CONN_NUM_FLAGS);
|
||||||
|
|
||||||
/* Which local identity address this connection uses */
|
/* Which local identity address this connection uses */
|
||||||
u8_t id;
|
u8_t id;
|
||||||
|
|
||||||
#if defined(CONFIG_BT_SMP) || defined(CONFIG_BT_BREDR)
|
#if defined(CONFIG_BT_SMP) || defined(CONFIG_BT_BREDR)
|
||||||
bt_security_t sec_level;
|
bt_security_t sec_level;
|
||||||
bt_security_t required_sec_level;
|
bt_security_t required_sec_level;
|
||||||
u8_t encrypt;
|
u8_t encrypt;
|
||||||
#endif /* CONFIG_BT_SMP || CONFIG_BT_BREDR */
|
#endif /* CONFIG_BT_SMP || CONFIG_BT_BREDR */
|
||||||
|
|
||||||
/* Connection error or reason for disconnect */
|
/* Connection error or reason for disconnect */
|
||||||
u8_t err;
|
u8_t err;
|
||||||
|
|
||||||
bt_conn_state_t state;
|
bt_conn_state_t state;
|
||||||
|
|
||||||
u16_t rx_len;
|
u16_t rx_len;
|
||||||
struct net_buf *rx;
|
struct net_buf *rx;
|
||||||
|
|
||||||
/* Sent but not acknowledged TX packets with a callback */
|
/* Sent but not acknowledged TX packets with a callback */
|
||||||
sys_slist_t tx_pending;
|
sys_slist_t tx_pending;
|
||||||
/* Sent but not acknowledged TX packets without a callback before
|
/* Sent but not acknowledged TX packets without a callback before
|
||||||
* the next packet (if any) in tx_pending.
|
* the next packet (if any) in tx_pending.
|
||||||
*/
|
*/
|
||||||
u32_t pending_no_cb;
|
u32_t pending_no_cb;
|
||||||
|
|
||||||
/* Completed TX for which we need to call the callback */
|
/* Completed TX for which we need to call the callback */
|
||||||
sys_slist_t tx_complete;
|
sys_slist_t tx_complete;
|
||||||
struct k_work tx_complete_work;
|
struct k_work tx_complete_work;
|
||||||
|
|
||||||
/* Queue for outgoing ACL data */
|
/* Queue for outgoing ACL data */
|
||||||
struct k_fifo tx_queue;
|
struct k_fifo tx_queue;
|
||||||
|
|
||||||
/* Active L2CAP channels */
|
/* Active L2CAP channels */
|
||||||
sys_slist_t channels;
|
sys_slist_t channels;
|
||||||
|
|
||||||
atomic_t ref;
|
atomic_t ref;
|
||||||
|
|
||||||
/* Delayed work for connection update and other deferred tasks */
|
/* Delayed work for connection update and other deferred tasks */
|
||||||
struct k_delayed_work update_work;
|
struct k_delayed_work update_work;
|
||||||
|
|
||||||
union {
|
union {
|
||||||
struct bt_conn_le le;
|
struct bt_conn_le le;
|
||||||
#if defined(CONFIG_BT_BREDR)
|
#if defined(CONFIG_BT_BREDR)
|
||||||
struct bt_conn_br br;
|
struct bt_conn_br br;
|
||||||
struct bt_conn_sco sco;
|
struct bt_conn_sco sco;
|
||||||
#endif
|
#endif
|
||||||
#if defined(CONFIG_BT_AUDIO)
|
#if defined(CONFIG_BT_AUDIO)
|
||||||
struct bt_conn_iso iso;
|
struct bt_conn_iso iso;
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
#if defined(CONFIG_BT_REMOTE_VERSION)
|
#if defined(CONFIG_BT_REMOTE_VERSION)
|
||||||
struct bt_conn_rv {
|
struct bt_conn_rv {
|
||||||
u8_t version;
|
u8_t version;
|
||||||
u16_t manufacturer;
|
u16_t manufacturer;
|
||||||
u16_t subversion;
|
u16_t subversion;
|
||||||
} rv;
|
} rv;
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -178,23 +184,19 @@ void bt_conn_reset_rx_state(struct bt_conn *conn);
|
|||||||
void bt_conn_recv(struct bt_conn *conn, struct net_buf *buf, u8_t flags);
|
void bt_conn_recv(struct bt_conn *conn, struct net_buf *buf, u8_t flags);
|
||||||
|
|
||||||
/* Send data over a connection */
|
/* Send data over a connection */
|
||||||
int bt_conn_send_cb(struct bt_conn *conn, struct net_buf *buf,
|
int bt_conn_send_cb(struct bt_conn *conn, struct net_buf *buf, bt_conn_tx_cb_t cb, void *user_data);
|
||||||
bt_conn_tx_cb_t cb, void *user_data);
|
|
||||||
|
|
||||||
static inline int bt_conn_send(struct bt_conn *conn, struct net_buf *buf)
|
static inline int bt_conn_send(struct bt_conn *conn, struct net_buf *buf) { return bt_conn_send_cb(conn, buf, NULL, NULL); }
|
||||||
{
|
|
||||||
return bt_conn_send_cb(conn, buf, NULL, NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Add a new LE connection */
|
/* Add a new LE connection */
|
||||||
struct bt_conn *bt_conn_add_le(u8_t id, const bt_addr_le_t *peer);
|
struct bt_conn *bt_conn_add_le(u8_t id, const bt_addr_le_t *peer);
|
||||||
|
|
||||||
/** Connection parameters for ISO connections */
|
/** Connection parameters for ISO connections */
|
||||||
struct bt_iso_create_param {
|
struct bt_iso_create_param {
|
||||||
uint8_t id;
|
uint8_t id;
|
||||||
uint8_t num_conns;
|
uint8_t num_conns;
|
||||||
struct bt_conn **conns;
|
struct bt_conn **conns;
|
||||||
struct bt_iso_chan **chans;
|
struct bt_iso_chan **chans;
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Bind ISO connections parameters */
|
/* Bind ISO connections parameters */
|
||||||
@@ -251,14 +253,12 @@ struct bt_conn *bt_conn_lookup_id(u8_t id);
|
|||||||
/* Look up a connection state. For BT_ADDR_LE_ANY, returns the first connection
|
/* Look up a connection state. For BT_ADDR_LE_ANY, returns the first connection
|
||||||
* with the specific state
|
* with the specific state
|
||||||
*/
|
*/
|
||||||
struct bt_conn *bt_conn_lookup_state_le(const bt_addr_le_t *peer,
|
struct bt_conn *bt_conn_lookup_state_le(const bt_addr_le_t *peer, const bt_conn_state_t state);
|
||||||
const bt_conn_state_t state);
|
|
||||||
|
|
||||||
/* Set connection object in certain state and perform action related to state */
|
/* Set connection object in certain state and perform action related to state */
|
||||||
void bt_conn_set_state(struct bt_conn *conn, bt_conn_state_t state);
|
void bt_conn_set_state(struct bt_conn *conn, bt_conn_state_t state);
|
||||||
|
|
||||||
int bt_conn_le_conn_update(struct bt_conn *conn,
|
int bt_conn_le_conn_update(struct bt_conn *conn, const struct bt_le_conn_param *param);
|
||||||
const struct bt_le_conn_param *param);
|
|
||||||
|
|
||||||
void notify_remote_info(struct bt_conn *conn);
|
void notify_remote_info(struct bt_conn *conn);
|
||||||
|
|
||||||
@@ -268,8 +268,7 @@ bool le_param_req(struct bt_conn *conn, struct bt_le_conn_param *param);
|
|||||||
|
|
||||||
#if defined(CONFIG_BT_SMP)
|
#if defined(CONFIG_BT_SMP)
|
||||||
/* rand and ediv should be in BT order */
|
/* rand and ediv should be in BT order */
|
||||||
int bt_conn_le_start_encryption(struct bt_conn *conn, u8_t rand[8],
|
int bt_conn_le_start_encryption(struct bt_conn *conn, u8_t rand[8], u8_t ediv[2], const u8_t *ltk, size_t len);
|
||||||
u8_t ediv[2], const u8_t *ltk, size_t len);
|
|
||||||
|
|
||||||
/* Notify higher layers that RPA was resolved */
|
/* Notify higher layers that RPA was resolved */
|
||||||
void bt_conn_identity_resolved(struct bt_conn *conn);
|
void bt_conn_identity_resolved(struct bt_conn *conn);
|
||||||
@@ -282,41 +281,27 @@ void bt_conn_security_changed(struct bt_conn *conn, enum bt_security_err err);
|
|||||||
|
|
||||||
/* Prepare a PDU to be sent over a connection */
|
/* Prepare a PDU to be sent over a connection */
|
||||||
#if defined(CONFIG_NET_BUF_LOG)
|
#if defined(CONFIG_NET_BUF_LOG)
|
||||||
struct net_buf *bt_conn_create_pdu_timeout_debug(struct net_buf_pool *pool,
|
struct net_buf *bt_conn_create_pdu_timeout_debug(struct net_buf_pool *pool, size_t reserve, s32_t timeout, const char *func, int line);
|
||||||
size_t reserve, s32_t timeout,
|
#define bt_conn_create_pdu_timeout(_pool, _reserve, _timeout) bt_conn_create_pdu_timeout_debug(_pool, _reserve, _timeout, __func__, __LINE__)
|
||||||
const char *func, int line);
|
|
||||||
#define bt_conn_create_pdu_timeout(_pool, _reserve, _timeout) \
|
|
||||||
bt_conn_create_pdu_timeout_debug(_pool, _reserve, _timeout, \
|
|
||||||
__func__, __LINE__)
|
|
||||||
|
|
||||||
#define bt_conn_create_pdu(_pool, _reserve) \
|
#define bt_conn_create_pdu(_pool, _reserve) bt_conn_create_pdu_timeout_debug(_pool, _reserve, K_FOREVER, __func__, __line__)
|
||||||
bt_conn_create_pdu_timeout_debug(_pool, _reserve, K_FOREVER, \
|
|
||||||
__func__, __line__)
|
|
||||||
#else
|
#else
|
||||||
struct net_buf *bt_conn_create_pdu_timeout(struct net_buf_pool *pool,
|
struct net_buf *bt_conn_create_pdu_timeout(struct net_buf_pool *pool, size_t reserve, s32_t timeout);
|
||||||
size_t reserve, s32_t timeout);
|
|
||||||
|
|
||||||
#define bt_conn_create_pdu(_pool, _reserve) \
|
#define bt_conn_create_pdu(_pool, _reserve) bt_conn_create_pdu_timeout(_pool, _reserve, K_FOREVER)
|
||||||
bt_conn_create_pdu_timeout(_pool, _reserve, K_FOREVER)
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Prepare a PDU to be sent over a connection */
|
/* Prepare a PDU to be sent over a connection */
|
||||||
#if defined(CONFIG_NET_BUF_LOG)
|
#if defined(CONFIG_NET_BUF_LOG)
|
||||||
struct net_buf *bt_conn_create_frag_timeout_debug(size_t reserve, s32_t timeout,
|
struct net_buf *bt_conn_create_frag_timeout_debug(size_t reserve, s32_t timeout, const char *func, int line);
|
||||||
const char *func, int line);
|
|
||||||
|
|
||||||
#define bt_conn_create_frag_timeout(_reserve, _timeout) \
|
#define bt_conn_create_frag_timeout(_reserve, _timeout) bt_conn_create_frag_timeout_debug(_reserve, _timeout, __func__, __LINE__)
|
||||||
bt_conn_create_frag_timeout_debug(_reserve, _timeout, \
|
|
||||||
__func__, __LINE__)
|
|
||||||
|
|
||||||
#define bt_conn_create_frag(_reserve) \
|
#define bt_conn_create_frag(_reserve) bt_conn_create_frag_timeout_debug(_reserve, K_FOREVER, __func__, __LINE__)
|
||||||
bt_conn_create_frag_timeout_debug(_reserve, K_FOREVER, \
|
|
||||||
__func__, __LINE__)
|
|
||||||
#else
|
#else
|
||||||
struct net_buf *bt_conn_create_frag_timeout(size_t reserve, s32_t timeout);
|
struct net_buf *bt_conn_create_frag_timeout(size_t reserve, s32_t timeout);
|
||||||
|
|
||||||
#define bt_conn_create_frag(_reserve) \
|
#define bt_conn_create_frag(_reserve) bt_conn_create_frag_timeout(_reserve, K_FOREVER)
|
||||||
bt_conn_create_frag_timeout(_reserve, K_FOREVER)
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Initialize connection management */
|
/* Initialize connection management */
|
||||||
@@ -326,7 +311,7 @@ int bt_conn_init(void);
|
|||||||
struct k_sem *bt_conn_get_pkts(struct bt_conn *conn);
|
struct k_sem *bt_conn_get_pkts(struct bt_conn *conn);
|
||||||
|
|
||||||
/* k_poll related helpers for the TX thread */
|
/* k_poll related helpers for the TX thread */
|
||||||
int bt_conn_prepare_events(struct k_poll_event events[]);
|
int bt_conn_prepare_events(struct k_poll_event events[]);
|
||||||
void bt_conn_process_tx(struct bt_conn *conn);
|
void bt_conn_process_tx(struct bt_conn *conn);
|
||||||
|
|
||||||
#if defined(BFLB_BLE)
|
#if defined(BFLB_BLE)
|
||||||
|
|||||||
@@ -48,43 +48,45 @@
|
|||||||
|
|
||||||
// Settings
|
// Settings
|
||||||
|
|
||||||
#define BT_UUID_CHAR_BLE_SETTINGS_VALUE_SAVE BT_UUID_DECLARE_16(0)
|
#define BT_UUID_CHAR_BLE_SETTINGS_VALUE_SAVE BT_UUID_DECLARE_16(0xFFFF)
|
||||||
#define BT_UUID_CHAR_BLE_SETTINGS_VALUE_1 BT_UUID_DECLARE_16(1)
|
#define BT_UUID_CHAR_BLE_SETTINGS_VALUE_RESET BT_UUID_DECLARE_16(0xFFFE)
|
||||||
#define BT_UUID_CHAR_BLE_SETTINGS_VALUE_2 BT_UUID_DECLARE_16(2)
|
#define BT_UUID_CHAR_BLE_SETTINGS_VALUE_0 BT_UUID_DECLARE_16(0)
|
||||||
#define BT_UUID_CHAR_BLE_SETTINGS_VALUE_3 BT_UUID_DECLARE_16(3)
|
#define BT_UUID_CHAR_BLE_SETTINGS_VALUE_1 BT_UUID_DECLARE_16(1)
|
||||||
#define BT_UUID_CHAR_BLE_SETTINGS_VALUE_4 BT_UUID_DECLARE_16(4)
|
#define BT_UUID_CHAR_BLE_SETTINGS_VALUE_2 BT_UUID_DECLARE_16(2)
|
||||||
#define BT_UUID_CHAR_BLE_SETTINGS_VALUE_5 BT_UUID_DECLARE_16(5)
|
#define BT_UUID_CHAR_BLE_SETTINGS_VALUE_3 BT_UUID_DECLARE_16(3)
|
||||||
#define BT_UUID_CHAR_BLE_SETTINGS_VALUE_6 BT_UUID_DECLARE_16(6)
|
#define BT_UUID_CHAR_BLE_SETTINGS_VALUE_4 BT_UUID_DECLARE_16(4)
|
||||||
#define BT_UUID_CHAR_BLE_SETTINGS_VALUE_7 BT_UUID_DECLARE_16(7)
|
#define BT_UUID_CHAR_BLE_SETTINGS_VALUE_5 BT_UUID_DECLARE_16(5)
|
||||||
#define BT_UUID_CHAR_BLE_SETTINGS_VALUE_8 BT_UUID_DECLARE_16(8)
|
#define BT_UUID_CHAR_BLE_SETTINGS_VALUE_6 BT_UUID_DECLARE_16(6)
|
||||||
#define BT_UUID_CHAR_BLE_SETTINGS_VALUE_9 BT_UUID_DECLARE_16(9)
|
#define BT_UUID_CHAR_BLE_SETTINGS_VALUE_7 BT_UUID_DECLARE_16(7)
|
||||||
#define BT_UUID_CHAR_BLE_SETTINGS_VALUE_10 BT_UUID_DECLARE_16(10)
|
#define BT_UUID_CHAR_BLE_SETTINGS_VALUE_8 BT_UUID_DECLARE_16(8)
|
||||||
#define BT_UUID_CHAR_BLE_SETTINGS_VALUE_11 BT_UUID_DECLARE_16(11)
|
#define BT_UUID_CHAR_BLE_SETTINGS_VALUE_9 BT_UUID_DECLARE_16(9)
|
||||||
#define BT_UUID_CHAR_BLE_SETTINGS_VALUE_12 BT_UUID_DECLARE_16(12)
|
#define BT_UUID_CHAR_BLE_SETTINGS_VALUE_10 BT_UUID_DECLARE_16(10)
|
||||||
#define BT_UUID_CHAR_BLE_SETTINGS_VALUE_13 BT_UUID_DECLARE_16(13)
|
#define BT_UUID_CHAR_BLE_SETTINGS_VALUE_11 BT_UUID_DECLARE_16(11)
|
||||||
#define BT_UUID_CHAR_BLE_SETTINGS_VALUE_14 BT_UUID_DECLARE_16(14)
|
#define BT_UUID_CHAR_BLE_SETTINGS_VALUE_12 BT_UUID_DECLARE_16(12)
|
||||||
#define BT_UUID_CHAR_BLE_SETTINGS_VALUE_15 BT_UUID_DECLARE_16(15)
|
#define BT_UUID_CHAR_BLE_SETTINGS_VALUE_13 BT_UUID_DECLARE_16(13)
|
||||||
#define BT_UUID_CHAR_BLE_SETTINGS_VALUE_16 BT_UUID_DECLARE_16(16)
|
#define BT_UUID_CHAR_BLE_SETTINGS_VALUE_14 BT_UUID_DECLARE_16(14)
|
||||||
#define BT_UUID_CHAR_BLE_SETTINGS_VALUE_17 BT_UUID_DECLARE_16(17)
|
#define BT_UUID_CHAR_BLE_SETTINGS_VALUE_15 BT_UUID_DECLARE_16(15)
|
||||||
#define BT_UUID_CHAR_BLE_SETTINGS_VALUE_18 BT_UUID_DECLARE_16(18)
|
#define BT_UUID_CHAR_BLE_SETTINGS_VALUE_16 BT_UUID_DECLARE_16(16)
|
||||||
#define BT_UUID_CHAR_BLE_SETTINGS_VALUE_19 BT_UUID_DECLARE_16(19)
|
#define BT_UUID_CHAR_BLE_SETTINGS_VALUE_17 BT_UUID_DECLARE_16(17)
|
||||||
#define BT_UUID_CHAR_BLE_SETTINGS_VALUE_20 BT_UUID_DECLARE_16(20)
|
#define BT_UUID_CHAR_BLE_SETTINGS_VALUE_18 BT_UUID_DECLARE_16(18)
|
||||||
#define BT_UUID_CHAR_BLE_SETTINGS_VALUE_21 BT_UUID_DECLARE_16(21)
|
#define BT_UUID_CHAR_BLE_SETTINGS_VALUE_19 BT_UUID_DECLARE_16(19)
|
||||||
#define BT_UUID_CHAR_BLE_SETTINGS_VALUE_22 BT_UUID_DECLARE_16(22)
|
#define BT_UUID_CHAR_BLE_SETTINGS_VALUE_20 BT_UUID_DECLARE_16(20)
|
||||||
#define BT_UUID_CHAR_BLE_SETTINGS_VALUE_23 BT_UUID_DECLARE_16(23)
|
#define BT_UUID_CHAR_BLE_SETTINGS_VALUE_21 BT_UUID_DECLARE_16(21)
|
||||||
#define BT_UUID_CHAR_BLE_SETTINGS_VALUE_24 BT_UUID_DECLARE_16(24)
|
#define BT_UUID_CHAR_BLE_SETTINGS_VALUE_22 BT_UUID_DECLARE_16(22)
|
||||||
#define BT_UUID_CHAR_BLE_SETTINGS_VALUE_25 BT_UUID_DECLARE_16(25)
|
#define BT_UUID_CHAR_BLE_SETTINGS_VALUE_23 BT_UUID_DECLARE_16(23)
|
||||||
#define BT_UUID_CHAR_BLE_SETTINGS_VALUE_26 BT_UUID_DECLARE_16(26)
|
#define BT_UUID_CHAR_BLE_SETTINGS_VALUE_24 BT_UUID_DECLARE_16(24)
|
||||||
#define BT_UUID_CHAR_BLE_SETTINGS_VALUE_27 BT_UUID_DECLARE_16(27)
|
#define BT_UUID_CHAR_BLE_SETTINGS_VALUE_25 BT_UUID_DECLARE_16(25)
|
||||||
#define BT_UUID_CHAR_BLE_SETTINGS_VALUE_28 BT_UUID_DECLARE_16(28)
|
#define BT_UUID_CHAR_BLE_SETTINGS_VALUE_26 BT_UUID_DECLARE_16(26)
|
||||||
#define BT_UUID_CHAR_BLE_SETTINGS_VALUE_29 BT_UUID_DECLARE_16(29)
|
#define BT_UUID_CHAR_BLE_SETTINGS_VALUE_27 BT_UUID_DECLARE_16(27)
|
||||||
#define BT_UUID_CHAR_BLE_SETTINGS_VALUE_30 BT_UUID_DECLARE_16(30)
|
#define BT_UUID_CHAR_BLE_SETTINGS_VALUE_28 BT_UUID_DECLARE_16(28)
|
||||||
#define BT_UUID_CHAR_BLE_SETTINGS_VALUE_31 BT_UUID_DECLARE_16(31)
|
#define BT_UUID_CHAR_BLE_SETTINGS_VALUE_29 BT_UUID_DECLARE_16(29)
|
||||||
#define BT_UUID_CHAR_BLE_SETTINGS_VALUE_32 BT_UUID_DECLARE_16(32)
|
#define BT_UUID_CHAR_BLE_SETTINGS_VALUE_30 BT_UUID_DECLARE_16(30)
|
||||||
#define BT_UUID_CHAR_BLE_SETTINGS_VALUE_33 BT_UUID_DECLARE_16(33)
|
#define BT_UUID_CHAR_BLE_SETTINGS_VALUE_31 BT_UUID_DECLARE_16(31)
|
||||||
#define BT_UUID_CHAR_BLE_SETTINGS_VALUE_34 BT_UUID_DECLARE_16(34)
|
#define BT_UUID_CHAR_BLE_SETTINGS_VALUE_32 BT_UUID_DECLARE_16(32)
|
||||||
#define BT_UUID_CHAR_BLE_SETTINGS_VALUE_35 BT_UUID_DECLARE_16(35)
|
#define BT_UUID_CHAR_BLE_SETTINGS_VALUE_33 BT_UUID_DECLARE_16(33)
|
||||||
#define BT_UUID_CHAR_BLE_SETTINGS_VALUE_36 BT_UUID_DECLARE_16(36)
|
#define BT_UUID_CHAR_BLE_SETTINGS_VALUE_34 BT_UUID_DECLARE_16(34)
|
||||||
#define BT_UUID_CHAR_BLE_SETTINGS_VALUE_37 BT_UUID_DECLARE_16(37)
|
#define BT_UUID_CHAR_BLE_SETTINGS_VALUE_35 BT_UUID_DECLARE_16(35)
|
||||||
|
#define BT_UUID_CHAR_BLE_SETTINGS_VALUE_36 BT_UUID_DECLARE_16(36)
|
||||||
|
#define BT_UUID_CHAR_BLE_SETTINGS_VALUE_37 BT_UUID_DECLARE_16(37)
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
@@ -129,7 +129,7 @@ int ble_char_read_status_callback(struct bt_conn *conn, const struct bt_gatt_att
|
|||||||
return sizeof(temp);
|
return sizeof(temp);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
MSG("Unhandled attr read %d | %d\n", (uint32_t)attr->uuid, uuid_value);
|
MSG((char *)"Unhandled attr read %d | %d\n", (uint32_t)attr->uuid, uuid_value);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
int ble_char_read_bulk_value_callback(struct bt_conn *conn, const struct bt_gatt_attr *attr, void *buf, u16_t len, u16_t offset) {
|
int ble_char_read_bulk_value_callback(struct bt_conn *conn, const struct bt_gatt_attr *attr, void *buf, u16_t len, u16_t offset) {
|
||||||
@@ -194,17 +194,17 @@ int ble_char_read_setting_value_callback(struct bt_conn *conn, const struct bt_g
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
uint16_t uuid_value = ((struct bt_uuid_16 *)attr->uuid)->val;
|
uint16_t uuid_value = ((struct bt_uuid_16 *)attr->uuid)->val;
|
||||||
uint16_t temp = 0;
|
uint16_t temp = 0xFFFF;
|
||||||
if (uuid_value == 0) {
|
if (uuid_value <= SettingsOptions::SettingsOptionsLength) {
|
||||||
|
temp = getSettingValue((SettingsOptions)(uuid_value));
|
||||||
memcpy(buf, &temp, sizeof(temp));
|
memcpy(buf, &temp, sizeof(temp));
|
||||||
return sizeof(temp);
|
return sizeof(temp);
|
||||||
} else if (uuid_value <= SettingsOptions::SettingsOptionsLength) {
|
} else {
|
||||||
temp = getSettingValue((SettingsOptions)(uuid_value - 1));
|
|
||||||
memcpy(buf, &temp, sizeof(temp));
|
memcpy(buf, &temp, sizeof(temp));
|
||||||
return sizeof(temp);
|
return sizeof(temp);
|
||||||
}
|
}
|
||||||
|
|
||||||
MSG("Unhandled attr read %d | %d\n", (uint32_t)attr->uuid, uuid_value);
|
MSG((char *)"Unhandled attr read %d | %d\n", (uint32_t)attr->uuid, uuid_value);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -212,7 +212,7 @@ int ble_char_write_setting_value_callback(struct bt_conn *conn, const struct bt_
|
|||||||
|
|
||||||
if (flags & BT_GATT_WRITE_FLAG_PREPARE) {
|
if (flags & BT_GATT_WRITE_FLAG_PREPARE) {
|
||||||
// Don't use prepare write data, execute write will upload data again.
|
// Don't use prepare write data, execute write will upload data again.
|
||||||
BT_WARN("recv prepare write request\n");
|
BT_WARN((char *)"recv prepare write request\n");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
if (attr == NULL || attr->uuid == NULL) {
|
if (attr == NULL || attr->uuid == NULL) {
|
||||||
@@ -221,26 +221,31 @@ int ble_char_write_setting_value_callback(struct bt_conn *conn, const struct bt_
|
|||||||
|
|
||||||
if (flags & BT_GATT_WRITE_FLAG_CMD) {
|
if (flags & BT_GATT_WRITE_FLAG_CMD) {
|
||||||
// Use write command data.
|
// Use write command data.
|
||||||
BT_WARN("recv write command\n");
|
BT_WARN((char *)"recv write command\n");
|
||||||
} else {
|
} else {
|
||||||
// Use write request / execute write data.
|
// Use write request / execute write data.
|
||||||
BT_WARN("recv write request / exce write\n");
|
BT_WARN((char *)"recv write request / exce write\n");
|
||||||
}
|
}
|
||||||
uint16_t uuid_value = ((struct bt_uuid_16 *)attr->uuid)->val;
|
uint16_t uuid_value = ((struct bt_uuid_16 *)attr->uuid)->val;
|
||||||
if (len == 2) {
|
if (len == 2) {
|
||||||
uint16_t new_value = 0;
|
uint16_t new_value = 0;
|
||||||
memcpy(&new_value, buf, sizeof(new_value));
|
memcpy(&new_value, buf, sizeof(new_value));
|
||||||
if (uuid_value == 0) {
|
if (uuid_value == 0xFFFF) {
|
||||||
if (new_value == 1) {
|
if (new_value == 1) {
|
||||||
saveSettings();
|
saveSettings();
|
||||||
return len;
|
return len;
|
||||||
}
|
}
|
||||||
|
} else if (uuid_value == 0xFFFE) {
|
||||||
|
if (new_value == 1) {
|
||||||
|
resetSettings();
|
||||||
|
return len;
|
||||||
|
}
|
||||||
} else if (uuid_value < SettingsOptions::SettingsOptionsLength) {
|
} else if (uuid_value < SettingsOptions::SettingsOptionsLength) {
|
||||||
setSettingValue((SettingsOptions)(uuid_value - 1), new_value);
|
setSettingValue((SettingsOptions)(uuid_value), new_value);
|
||||||
return len;
|
return len;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
MSG("Unhandled attr write %d | %d\n", (uint32_t)attr->uuid, uuid_value);
|
MSG((char *)"Unhandled attr write %d | %d\n", (uint32_t)attr->uuid, uuid_value);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -26,9 +26,9 @@ NOTES
|
|||||||
#include "log.h"
|
#include "log.h"
|
||||||
#include "uuid.h"
|
#include "uuid.h"
|
||||||
|
|
||||||
|
#include "BSP.h"
|
||||||
#include "ble_characteristics.h"
|
#include "ble_characteristics.h"
|
||||||
#include "ble_handlers.h"
|
#include "ble_handlers.h"
|
||||||
|
|
||||||
bool pds_start;
|
bool pds_start;
|
||||||
|
|
||||||
static void ble_device_connected(struct bt_conn *conn, u8_t err);
|
static void ble_device_connected(struct bt_conn *conn, u8_t err);
|
||||||
@@ -167,7 +167,7 @@ static struct bt_gatt_attr attrs[] = {
|
|||||||
BT_GATT_CHARACTERISTIC(BT_UUID_CHAR_BLE_LIVE_DEV_ID, BT_GATT_CHRC_READ, BT_GATT_PERM_READ, ble_char_read_bulk_value_callback, NULL, NULL),
|
BT_GATT_CHARACTERISTIC(BT_UUID_CHAR_BLE_LIVE_DEV_ID, BT_GATT_CHRC_READ, BT_GATT_PERM_READ, ble_char_read_bulk_value_callback, NULL, NULL),
|
||||||
|
|
||||||
BT_GATT_PRIMARY_SERVICE(BT_UUID_SVC_SETTINGS_DATA),
|
BT_GATT_PRIMARY_SERVICE(BT_UUID_SVC_SETTINGS_DATA),
|
||||||
BT_GATT_CHARACTERISTIC(BT_UUID_CHAR_BLE_SETTINGS_VALUE_SAVE, BT_GATT_CHRC_READ | BT_GATT_CHRC_WRITE | BT_GATT_CHRC_WRITE_WITHOUT_RESP, BT_GATT_PERM_READ | BT_GATT_PERM_WRITE,
|
BT_GATT_CHARACTERISTIC(BT_UUID_CHAR_BLE_SETTINGS_VALUE_0, BT_GATT_CHRC_READ | BT_GATT_CHRC_WRITE | BT_GATT_CHRC_WRITE_WITHOUT_RESP, BT_GATT_PERM_READ | BT_GATT_PERM_WRITE,
|
||||||
ble_char_read_setting_value_callback, ble_char_write_setting_value_callback, NULL),
|
ble_char_read_setting_value_callback, ble_char_write_setting_value_callback, NULL),
|
||||||
BT_GATT_CHARACTERISTIC(BT_UUID_CHAR_BLE_SETTINGS_VALUE_1, BT_GATT_CHRC_READ | BT_GATT_CHRC_WRITE | BT_GATT_CHRC_WRITE_WITHOUT_RESP, BT_GATT_PERM_READ | BT_GATT_PERM_WRITE,
|
BT_GATT_CHARACTERISTIC(BT_UUID_CHAR_BLE_SETTINGS_VALUE_1, BT_GATT_CHRC_READ | BT_GATT_CHRC_WRITE | BT_GATT_CHRC_WRITE_WITHOUT_RESP, BT_GATT_PERM_READ | BT_GATT_PERM_WRITE,
|
||||||
ble_char_read_setting_value_callback, ble_char_write_setting_value_callback, NULL),
|
ble_char_read_setting_value_callback, ble_char_write_setting_value_callback, NULL),
|
||||||
@@ -243,6 +243,11 @@ static struct bt_gatt_attr attrs[] = {
|
|||||||
ble_char_read_setting_value_callback, ble_char_write_setting_value_callback, NULL),
|
ble_char_read_setting_value_callback, ble_char_write_setting_value_callback, NULL),
|
||||||
BT_GATT_CHARACTERISTIC(BT_UUID_CHAR_BLE_SETTINGS_VALUE_37, BT_GATT_CHRC_READ | BT_GATT_CHRC_WRITE | BT_GATT_CHRC_WRITE_WITHOUT_RESP, BT_GATT_PERM_READ | BT_GATT_PERM_WRITE,
|
BT_GATT_CHARACTERISTIC(BT_UUID_CHAR_BLE_SETTINGS_VALUE_37, BT_GATT_CHRC_READ | BT_GATT_CHRC_WRITE | BT_GATT_CHRC_WRITE_WITHOUT_RESP, BT_GATT_PERM_READ | BT_GATT_PERM_WRITE,
|
||||||
ble_char_read_setting_value_callback, ble_char_write_setting_value_callback, NULL),
|
ble_char_read_setting_value_callback, ble_char_write_setting_value_callback, NULL),
|
||||||
|
BT_GATT_CHARACTERISTIC(BT_UUID_CHAR_BLE_SETTINGS_VALUE_SAVE, BT_GATT_CHRC_READ | BT_GATT_CHRC_WRITE | BT_GATT_CHRC_WRITE_WITHOUT_RESP, BT_GATT_PERM_READ | BT_GATT_PERM_WRITE,
|
||||||
|
ble_char_read_setting_value_callback, ble_char_write_setting_value_callback, NULL),
|
||||||
|
|
||||||
|
BT_GATT_CHARACTERISTIC(BT_UUID_CHAR_BLE_SETTINGS_VALUE_RESET, BT_GATT_CHRC_READ | BT_GATT_CHRC_WRITE | BT_GATT_CHRC_WRITE_WITHOUT_RESP, BT_GATT_PERM_READ | BT_GATT_PERM_WRITE,
|
||||||
|
ble_char_read_setting_value_callback, ble_char_write_setting_value_callback, NULL),
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -250,14 +255,10 @@ static struct bt_gatt_attr attrs[] = {
|
|||||||
NAME
|
NAME
|
||||||
get_attr
|
get_attr
|
||||||
*/
|
*/
|
||||||
struct bt_gatt_attr *get_attr(u8_t index) {
|
struct bt_gatt_attr *get_attr(u8_t index) { return &attrs[index]; }
|
||||||
return &attrs[index];
|
|
||||||
}
|
|
||||||
|
|
||||||
static struct bt_gatt_service ble_tp_server = BT_GATT_SERVICE(attrs);
|
static struct bt_gatt_service ble_tp_server = BT_GATT_SERVICE(attrs);
|
||||||
|
|
||||||
const char *DEVICE_BLE_NAME = "Pinecil";
|
|
||||||
|
|
||||||
// Start advertising with expected default values
|
// Start advertising with expected default values
|
||||||
int ble_start_adv(void) {
|
int ble_start_adv(void) {
|
||||||
MSG("BLE Starting advertising\n");
|
MSG("BLE Starting advertising\n");
|
||||||
@@ -267,18 +268,15 @@ int ble_start_adv(void) {
|
|||||||
.interval_min = BT_GAP_ADV_FAST_INT_MIN_3,
|
.interval_min = BT_GAP_ADV_FAST_INT_MIN_3,
|
||||||
.interval_max = BT_GAP_ADV_FAST_INT_MAX_3,
|
.interval_max = BT_GAP_ADV_FAST_INT_MAX_3,
|
||||||
};
|
};
|
||||||
|
char nameBuffer[16];
|
||||||
|
int nameLen = snprintf(nameBuffer, 16, "Pinecil-%03d", (int)(getDeviceID() & 0xFFFF));
|
||||||
|
|
||||||
// scan and response data must each stay < 31 bytes
|
// scan and response data must each stay < 31 bytes
|
||||||
struct bt_data adv_data[2] = {
|
struct bt_data adv_data[2] = {BT_DATA_BYTES(BT_DATA_FLAGS, (BT_LE_AD_NO_BREDR | BT_LE_AD_GENERAL)), BT_DATA(BT_DATA_NAME_COMPLETE, nameBuffer, nameLen)};
|
||||||
BT_DATA_BYTES(BT_DATA_FLAGS, (BT_LE_AD_NO_BREDR | BT_LE_AD_GENERAL)),
|
|
||||||
BT_DATA(BT_DATA_NAME_COMPLETE, DEVICE_BLE_NAME, strlen(DEVICE_BLE_NAME))
|
|
||||||
};
|
|
||||||
|
|
||||||
struct bt_data scan_response_data[1] = {
|
struct bt_data scan_response_data[1] = {BT_DATA(BT_DATA_UUID128_SOME, ((struct bt_uuid_128 *)BT_UUID_SVC_BULK_DATA)->val, 16)};
|
||||||
BT_DATA(BT_DATA_UUID128_SOME, ((struct bt_uuid_128 *)BT_UUID_SVC_BULK_DATA)->val, 16)
|
|
||||||
};
|
|
||||||
|
|
||||||
return bt_le_adv_start(&adv_param, adv_data, ARRAY_SIZE(adv_data), scan_response_data, ARRAY_SIZE(scan_response_data));
|
return bt_le_adv_start(&adv_param, adv_data, ARRAY_SIZE(adv_data), scan_response_data, ARRAY_SIZE(scan_response_data));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Callback that the ble stack will call once it has been kicked off running
|
// Callback that the ble stack will call once it has been kicked off running
|
||||||
|
|||||||
Reference in New Issue
Block a user