98国产精品综合一区二区三区,国产福利视频,男人添女人囗交做爰视频,日本免费一区二区三区视频观看

你好!歡迎來(lái)到深圳市穎特新科技有限公司!
語(yǔ)言
當(dāng)前位置:首頁(yè) >> MM32/靈動(dòng)微電子 >> MM32W無(wú)線MCU系列產(chǎn)品應(yīng)用筆記 —— 自定義服務(wù)和特征值

MM32W無(wú)線MCU系列產(chǎn)品應(yīng)用筆記 —— 自定義服務(wù)和特征值

關(guān)鍵字:靈動(dòng)微電子 MM32W無(wú)線MCU 自定義服務(wù)和特征值 作者: 來(lái)源: 發(fā)布時(shí)間:2022-06-09  瀏覽:33
MM32W0x2xxB 藍(lán)牙功能協(xié)議棧目前以Lib 形式提供,用戶通過調(diào)用相關(guān)接口的方式實(shí)現(xiàn)對(duì)應(yīng)功能。例程中,用戶如需調(diào)整BLE 數(shù)據(jù)交互的特征值、服務(wù)及數(shù)據(jù)的收發(fā),可按照如下的幾個(gè)步驟進(jìn)行調(diào)整,大部分的配置都在..\SRC_LIB\app.c文件中。


藍(lán)牙之間通信是以參數(shù)來(lái)進(jìn)行數(shù)據(jù)傳輸,即服務(wù)端定好一個(gè)參數(shù),客戶端可以對(duì)這個(gè)參數(shù)進(jìn)行讀,寫,通知等操作,這個(gè)東西我們稱之為特征值(characteristic),但一個(gè)參數(shù)不夠我們用,比如我們這個(gè)特征值是電量的值,另一個(gè)特征值是設(shè)備讀取的溫度值。那這時(shí)候會(huì)有多個(gè)特征值,并且我們還會(huì)對(duì)它們分類,分出來(lái)的類我們稱之為服務(wù)(service)。一個(gè)設(shè)備可以有多個(gè)服務(wù),每一個(gè)服務(wù)可以包含多個(gè)特征值,本章節(jié)將介紹如何在例程中調(diào)整服務(wù)及自定義特征值。


在收發(fā)數(shù)據(jù)的時(shí)候,對(duì)于協(xié)議的處理基本都在lib中完成了,我們只需要在對(duì)應(yīng)的接口函數(shù)中進(jìn)一步處理就好。


聲明與定義


首先是服務(wù)及特特征值的定義,用戶可以自己分配,參考結(jié)構(gòu)定義如下所示:


typedef struct ble_character16{


u16 type16; //type2


u16 handle_rec; //handle


u8 characterInfo[5];//property1 - handle2 - uuid2


u8 uuid128_idx; //0xff means uuid16,other is idx of uuid128


}BLE_CHAR;


typedef struct ble_UUID128{


u8 uuid128[16];//uuid128 string: little endian


}BLE_UUID128;


分別修改const BLE_CHAR AttCharList[]和const BLE_UUID128 AttUuid128List[]中的數(shù)據(jù),自行分配句柄(遞增,不得重復(fù))


1、type16 為database 每個(gè)記錄的類型,具體取值根據(jù)藍(lán)牙規(guī)范定義;


常用的三個(gè)宏定義:


#define TYPE_CHAR 0x2803  //特征值的聲明


#define TYPE_CFG 0x2902  //客戶端特征值配置描述符


#define TYPE_INFO 0x2901  //特征值用戶描述符


2、handle_rec 為對(duì)應(yīng)記錄的句柄,用戶可以自定義;


3、characterInfo 保存了對(duì)應(yīng)特征值的屬性(property1)、句柄(handle2)及uuid(uuid2),其中handle2 及uuid2 為16 bit 小端格式;


常用的屬性的宏定義如下:


#define ATT_CHAR_PROP_RD   0x02   //可讀


#define ATT_CHAR_PROP_W_NORSP   0x04   //可寫,無(wú)需應(yīng)答


#define ATT_CHAR_PROP_W  0x08    //可寫


#define ATT_CHAR_PROP_NTF  0x10    //notify


#define ATT_CHAR_PROP_IND   0x20    //indicate


4、uuid128_idx 表示uuid2 的格式,如該值為UUID16_FORMAT(0xFF) 則表示uuid2 為16bit 格式,反之則表示uuid2 為128bit 的uuid 信息對(duì)應(yīng)的索引值,該索引值對(duì)應(yīng)于AttUuid128List 的內(nèi)容索引。uuid128 為小端格式保存。UUID就是通用唯一識(shí)別碼。在藍(lán)牙協(xié)議棧中可能會(huì)有多個(gè)服務(wù),每個(gè)服務(wù)會(huì)有多個(gè)特征值,而這些服務(wù)或者特征值都有一個(gè)唯一的ID,這樣就可以區(qū)分了。這個(gè)UUID是其他設(shè)備設(shè)置藍(lán)牙服務(wù)和特征值的唯一方法。


應(yīng)答Primary Service 的查詢
下一步要修改的是att_server_rdByGrType函數(shù)。
在函數(shù)中缺省情況下如果客戶對(duì)Device Info 不做特別修改,可直接調(diào)用缺省函數(shù)att_server_rdByGrTypeRspDeviceInfo(pdu_type)即可。


而下面的att_server_rdByGrTypeRspPrimaryService()需要按照上面的定義填充對(duì)應(yīng)的數(shù)據(jù),其中start_hd 與end_hd 為對(duì)應(yīng)Service handle 取值范圍,uuid 為字符串,對(duì)應(yīng)的長(zhǎng)度由uuidlen給出。


寫操作


            當(dāng)外界發(fā)來(lái)相關(guān)數(shù)據(jù)時(shí),ser_write_rsp()函數(shù)將被調(diào)用。


            void ser_write_rsp(       u8 pdu_type/*reserved*/, 


            u8 attOpcode/*reserved*/, 


            u16 att_hd,  //對(duì)應(yīng)特征值句柄


            u8* attValue, //數(shù)據(jù)內(nèi)容指針


            u8 valueLen_w) //數(shù)據(jù)長(zhǎng)度






       通過判斷特征值句柄att_hd,就可以進(jìn)一步處理收到的數(shù)據(jù)。


 若特征值屬性為ATT_CHAR_PROP_W,需要調(diào)用ser_write_rsp_pkt()函數(shù)對(duì)這次寫操作進(jìn)行應(yīng)答,不應(yīng)答會(huì)導(dǎo)致連接斷開。


若特征值無(wú)效或未定義,則使用att_notFd()函數(shù)進(jìn)行應(yīng)答,參數(shù)直接引用回調(diào)函數(shù)對(duì)應(yīng)參數(shù)即可。


其中att_hd 為從手機(jī)BLE 傳(寫)過來(lái)數(shù)據(jù)對(duì)應(yīng)的特征值的句柄,數(shù)據(jù)內(nèi)容保存在變量attValue 中,數(shù)據(jù)長(zhǎng)度為valueLen_w。


讀操作


類似寫操作,收到讀取特征值請(qǐng)求時(shí),ser_write_rsp()函數(shù)將被調(diào)用。


void server_rd_rsp(u8 attOpcode, u16 attHandle, u8 pdu_type)


通過判斷attHandle來(lái)執(zhí)行對(duì)應(yīng)操作,使用att_server_rd()函數(shù)進(jìn)行應(yīng)答。


void att_server_rd(unsigned char pdu_type,


unsigned char attOpcode


unsigned short att_hd,   //對(duì)應(yīng)特征值句柄


unsigned char* attValue,  //應(yīng)答數(shù)據(jù)指針


unsigned char datalen );  //數(shù)據(jù)長(zhǎng)度


其中pdu_type和attOpcode直接引用回調(diào)函數(shù)中對(duì)應(yīng)參數(shù),每次調(diào)用發(fā)送的數(shù)據(jù)長(zhǎng)度不得超過20字節(jié)。


同寫操作,若特征值無(wú)效或未定義,則使用att_notFd()函數(shù)進(jìn)行應(yīng)答。


Notify 數(shù)據(jù)發(fā)送操作


在模塊出廠時(shí)燒錄的例程中,可以通過UART的AT指令,調(diào)用Notify數(shù)據(jù)透?jìng),?duì)應(yīng)的接口函數(shù)是


u8 sconn_notifydata(u8* data, u8 len);


原則上數(shù)據(jù)長(zhǎng)度可以超過20 字節(jié),協(xié)議會(huì)自動(dòng)拆包發(fā)送,每個(gè)分包最大20字節(jié),推薦一次發(fā)送的數(shù)據(jù)盡量不超過3 個(gè)分包,該函數(shù)返回實(shí)際發(fā)送的數(shù)據(jù)長(zhǎng)度。這一函數(shù)沒有指定對(duì)應(yīng)的句柄,如果用戶定義了多個(gè)Notify特征值,需要在發(fā)送前使用set_notifyhandle()函數(shù)指定對(duì)應(yīng)的句柄,或者直接修改變量u16 cur_notifyhandle。


下面我們以在例程中添加一個(gè)可讀可寫的特征值為例,最后通過手機(jī)app與BLE之間進(jìn)行通信:


1、在const BLE_CHAR AttCharList[]數(shù)組最后添加


{TYPE_CHAR,0x1A,ATT_CHAR_PROP_RD|ATT_CHAR_PROP_W, 0x1B,0,0,0,4},


//User defined


即在原數(shù)組最后句柄0x19后添加新的特征值,對(duì)應(yīng)特征值設(shè)置可讀可寫,句柄0x001B為用戶自定義特征值,128位UUID,索引值為4;


2、在const BLE_UUID128 AttUuid128List[]數(shù)組最后添加對(duì)應(yīng)的UUID


{0x9e,0xca,0x0dc,0x24,0x0e,0xe5,0xa9,0xe0,0x93,0xf3,0xa3,0xb5,5,0,0x40,0x6e}, //idx4,little endian, Test


3、修改att_server_rdByGrType()函數(shù):


att_server_rdByGrTypeRspPrimaryService(pdu_type,0x10,0x1B,(u8*)(AttUuid128List[0].uuid128),16);


修改最后的句柄值。


4、修改ser_write_rsp()函數(shù)


在switch(att_hd)分支中加入


case 0x1B:


moduleOutData("Write_Server_1B\r\n",17);   


ser_write_rsp_pkt(pdu_type);


break;


5、修改server_rd_rsp()函數(shù)


在switch(attHandle)分支中加入


case 0x1B: 


moduleOutData("Read_Server_1B\r\n",17);   


att_server_rd( pdu_type, attOpcode, attHandle, "RD_SERVE_1B", 11);


break;


如下圖,程序下載運(yùn)行后,我們用手機(jī)連接模塊,可以看到在服務(wù)列表最后多出了一項(xiàng)Unknown Characteristic ,可讀可寫,點(diǎn)擊讀按鈕,可以收到字符串” RD_SERVE_1B”,UART串口輸出”Read_Server_1B”,點(diǎn)擊寫按鈕發(fā)送任意值會(huì)UART串口輸出”Write_Server_1B”。


圖片


圖1 手機(jī)端截圖


圖片


圖2 UART輸出

如需要了解更多靈動(dòng)微MCU產(chǎn)品,請(qǐng)聯(lián)系靈動(dòng)微核心代理商-穎特新科技

編輯:ls  最后修改時(shí)間:2022-06-09

聯(lián)系方式

0755-82591179

郵箱:ivy@yingtexin.net

地址:深圳市龍華區(qū)民治街道民治大道973萬(wàn)眾潤(rùn)豐創(chuàng)業(yè)園A棟2樓A09

Copyright © 2014-2025 穎特新科技有限公司 All Rights Reserved.  粵ICP備14043402號(hào)-4

精品人妻少妇嫩草av无码专区| 小受夹道具羞耻h调教play| 日产一二三区别免费必看| 学生挺进老师的小窄肉里| 母亲5免费完整高清电视| 白少洁第1一40章免费阅读| 亚洲av无码无在线观看红杏| 从客厅c到卧室c到厨房| 亚洲第一成人网站| 小莹客厅激情38章至50章一区| 穿着旗袍方便c英语老师| 亚洲精品巨爆乳无码大乳巨| 中文字幕无码日韩专区免费| 亚洲av无码乱码在线观看| 年轻18gay白嫩青少年| 12孩岁女a处破娇小| 无码粉嫩虎白一线天在线观看| 公与媳系列100集| 高清无码在线观看| 精品无码国产污污污免费网站2| 欧美黑人又粗又大的性格特点| 两根大肉大捧一进一出好爽视频| 日产乱码一二三区别免费| 3d动漫精品啪啪一区二区免费| 英语老师没戴套让我c了一节课| 国产精品久久久久久久9999| 一本大道熟女人妻中文字幕在线| 大秦赋全集1-78集免费观看| 宝贝腿开大点我添添公口述| 又硬又粗进去好爽a片看| 老师在办公室里给我开除了| 杂交bucsm人类ssba| 国产午夜精品一区理论片飘花| 我的世界珍妮视频完整版在线观看| 久久国产欧美国日产综合抖音| 高潮捣出白浆嗯啊哭叫h漫画| 国产精品日韩欧美一区二区三区| 老师办公室狂肉校花h| 69久久久久精品9999不卡片| 乳妓h军妓调教hh文| 男男做爰猛烈叫床视频gv|