久久精品国产精品国产一区,少妇扒开毛毛自慰喷水,国产精品无码电影在线观看 ,久久天天躁夜夜躁狠狠85麻豆

思澈科技軟件開發(fā)工具包  2.20
Sibles GATT 服務(wù)

GATT

通用屬性配置文件(GATT)使用屬性(ATT)協(xié)議來定義一個服務(wù)框架來傳輸數(shù)據(jù)。 GATT 定義了兩個角色,客戶端和服務(wù)器。

  • 服務(wù)端按照ATT數(shù)據(jù)格式構(gòu)建服務(wù)數(shù)據(jù)庫,響應(yīng)客戶端的命令和請求。
  • 客戶端發(fā)現(xiàn)服務(wù)器的數(shù)據(jù)庫并向服務(wù)器發(fā)送命令和請求。
  • GATT 定義了客戶端和服務(wù)器之間發(fā)現(xiàn)、讀取、寫入、通知和指示以交換數(shù)據(jù)的過程。

一個屬性數(shù)據(jù)由4部分組成:

  • 屬性句柄,是指定屬性的索引。 該值是從 0x0001 到 0xFFFF。
  • 屬性類型通過位/128位uuid對屬性句柄的描述。 uuid 可以是 SIG 分配的或用戶自定義的。
  • 屬性值,是屬性的數(shù)據(jù)。
  • 屬性權(quán)限,指示屬性是否可以讀取或?qū)懭搿?/li>

基于屬性,服務(wù)框架層次結(jié)構(gòu)為:配置文件、服務(wù)、包含服務(wù)和特征。

  • 配置文件是由一個或多個服務(wù)組成的高級概念。 它定義了訪問服務(wù)的行為。
  • 服務(wù)由幾個包括服務(wù)和特征組成。 它定義了數(shù)據(jù)格式和相關(guān)的行為。
  • 包含服務(wù)是指服務(wù)器上存在的其他服務(wù)定義。
  • 特征描述詳細(xì)數(shù)據(jù)格式和行為。 它包含特征聲明、特征值和特征描述符。

以下是電池服務(wù)的示例。 電池服務(wù)是通知客戶電池更換。 因此,該服務(wù)具有具有可讀性和通知屬性的電池電量特性。 客戶端可以編寫客戶端特征配置描述符(CCCD)以啟用通知。 然后電池服務(wù)將通知電池電量。

實現(xiàn)GATT服務(wù)。

Sibles GATT 服務(wù)提供了可以由工具生成的格式化 API。 用戶還可以按照以下步驟通過 API 自定義 GATT 服務(wù):

  1. 構(gòu)建 GATT 服務(wù)并注冊到 SIBLEs GATT 服務(wù)。 該服務(wù)將自動從藍(lán)牙堆棧中保存用戶 GATT 服務(wù)的分配 GATT 句柄。
  2. 注冊設(shè)置/獲取回調(diào)以響應(yīng)客戶端命令。 SIBLEs GATT 服務(wù)將使用指定的句柄通知用戶客戶端請求。

以下是電池服務(wù)的示例:

// Battery Service Attributes Indexes which are mapping to GATT handle.
enum
{
BAS_IDX_SVC,
BAS_IDX_BATT_LVL_CHAR,
BAS_IDX_BATT_LVL_VAL,
BAS_IDX_BATT_LVL_NTF_CFG,
BAS_IDX_NB,
};
typedef enum
{
BASS_STATE_IDLE,
BASS_STATE_READY,
BASS_STATE_BUSY,
} ble_bass_state_t;
// Full BAS Database Description - Used to add attributes into the database
const struct attm_desc bas_att_db[BAS_IDX_NB] =
{
// Battery Service Declaration
[BAS_IDX_SVC] = {ATT_DECL_PRIMARY_SERVICE, PERM(RD, ENABLE), 0, 0},
// Battery Level Characteristic Declaration
[BAS_IDX_BATT_LVL_CHAR] = {ATT_DECL_CHARACTERISTIC, PERM(RD, ENABLE), 0, 0},
// Battery Level Characteristic Value
[BAS_IDX_BATT_LVL_VAL] = {ATT_CHAR_BATTERY_LEVEL, PERM(RD, ENABLE) | PERM(NTF, ENABLE), PERM(RI, ENABLE), 0},
// Battery Level Characteristic - Client Characteristic Configuration Descriptor
[BAS_IDX_BATT_LVL_NTF_CFG] = {ATT_DESC_CLIENT_CHAR_CFG, PERM(RD, ENABLE) | PERM(WRITE_REQ, ENABLE), 0, 0},
};
typedef struct
{
ble_bass_callback callback;
sibles_hdl handle;
uint8_t state;
uint8_t cccd_enable;
uint8_t bas_lvl;
} ble_bass_env_t;
static ble_bass_env_t g_bass_env_t;
static ble_bass_env_t *ble_bass_get_env(void)
{
return &g_bass_env_t;
}
// Read callback for specfied index.
static uint8_t *ble_bass_get_cbk(uint8_t conn_idx, uint8_t idx, uint16_t *len)
{
ble_bass_env_t *env = ble_bass_get_env();
switch (idx)
{
case BAS_IDX_BATT_LVL_VAL:
{
*len = sizeof(uint8_t);
if (env->callback)
env->bas_lvl = env->callback(conn_idx, BLE_BASS_GET_BATTERY_LVL);
rt_kprintf("battery lvl %d", env->bas_lvl);
return &env->bas_lvl;
break;
}
default:
break;
}
*len = 0;
return NULL;
}
// Write callback for specfied index.
static uint8_t ble_bass_set_cbk(uint8_t conn_idx, sibles_set_cbk_t *para)
{
ble_bass_env_t *env = ble_bass_get_env();
switch (para->idx)
{
case BAS_IDX_BATT_LVL_NTF_CFG:
{
rt_kprintf("bas enable %d", *(para->value));
env->cccd_enable = *(para->value);
break;
}
default:
break;
}
return 0;
}
int8_t ble_bass_notify_battery_lvl(uint8_t conn_idx, uint8_t lvl)
{
ble_bass_env_t *env = ble_bass_get_env();
uint8_t ret = -1;
if (env->state == BASS_STATE_READY)
{
if (env->bas_lvl != lvl)
{
env->bas_lvl = lvl;
value.hdl = env->handle;
value.idx = BAS_IDX_BATT_LVL_VAL;
value.len = sizeof(uint8_t);
value.value = &env->bas_lvl;
int ret = sibles_write_value(conn_idx, &value);
ret = 0;
}
ret = -2;
}
return ret;
}
void ble_bass_init(ble_bass_callback callback, uint8_t battery_lvl)
{
ble_bass_env_t *env = ble_bass_get_env();
if (env->state == BASS_STATE_IDLE)
{
// Provided battery database.
svc.att_db = (struct attm_desc *)&bas_att_db
svc.num_entry = BAS_IDX_NB;
svc.sec_lvl = PERM(SVC_AUTH, NO_AUTH);
env->handle = sibles_register_svc(&svc);
if (env->handle)
sibles_register_cbk(env->handle, ble_bass_get_cbk, ble_bass_set_cbk); // Register read/write callback to respond client access.
env->state = BASS_STATE_READY;
}
env->bas_lvl = battery_lvl;
env->callback = callback;
}

消息流

  • 立即閱讀回復(fù)
  • 讀取響應(yīng)預(yù)設(shè)
  • 寫回復(fù)
  • 指示
sibles_register_svc_t
.Register GATT service parameter with 16 bit uuid.
Definition: bf0_sibles.h:213
ATT_SVC_BATTERY_SERVICE
@ ATT_SVC_BATTERY_SERVICE
Battery Service.
Definition: att.h:209
len
uint16_t len
Definition: bf0_ble_ancs.h:226
sibles_value_t::hdl
sibles_hdl hdl
Definition: bf0_sibles.h:237
PERM
#define PERM(access, right)
Macro used to retrieve permission value from access and rights on attribute.
Definition: att.h:990
sibles_value_t::idx
uint8_t idx
Definition: bf0_sibles.h:238
sibles_register_svc_t::uuid
uint16_t uuid
Definition: bf0_sibles.h:214
ATT_DESC_CLIENT_CHAR_CFG
@ ATT_DESC_CLIENT_CHAR_CFG
Client characteristic configuration.
Definition: att.h:489
sibles_register_svc_t::att_db
struct attm_desc * att_db
Definition: bf0_sibles.h:215
sibles_register_cbk
void sibles_register_cbk(sibles_hdl hdl, sibles_get_cbk gcbk, sibles_set_cbk scbk)
Register GATT service callback.
ATT_DECL_PRIMARY_SERVICE
@ ATT_DECL_PRIMARY_SERVICE
Primary service Declaration.
Definition: att.h:474
ATT_DECL_CHARACTERISTIC
@ ATT_DECL_CHARACTERISTIC
Characteristic Declaration.
Definition: att.h:480
sibles_register_svc_t::sec_lvl
uint8_t sec_lvl
Definition: bf0_sibles.h:217
sibles_value_t::len
uint16_t len
Definition: bf0_sibles.h:239
attm_desc
Internal 16bits UUID service description.
Definition: bf0_sibles.h:161
sibles_set_cbk_t::value
uint8_t * value
Definition: bf0_sibles.h:395
sibles_value_t::value
uint8_t * value
Definition: bf0_sibles.h:240
sibles_register_svc
sibles_hdl sibles_register_svc(sibles_register_svc_t *svc)
Register 16 bits GATT service.
sibles_set_cbk_t
The strcture of set cbk parameter.
Definition: bf0_sibles.h:391
sibles_value_t
The structure of Sibles GATT value .
Definition: bf0_sibles.h:236
sibles_write_value
int sibles_write_value(uint8_t conn_idx, sibles_value_t *value)
Send new service attribute to remote using gatt notify.
ATT_CHAR_BATTERY_LEVEL
@ ATT_CHAR_BATTERY_LEVEL
Battery Level.
Definition: att.h:556
sibles_hdl
void * sibles_hdl
.Service handle.
Definition: bf0_sibles.h:193
sibles_register_svc_t::num_entry
int num_entry
Definition: bf0_sibles.h:216
sibles_set_cbk_t::idx
uint8_t idx
Definition: bf0_sibles.h:392