版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
FR801xHSDKUserBluetoothLowEnergySOCwithSIG2020-03概 FR801xHSDK結(jié) 空間分 地址空 空間分 代碼流 user_custom_parameters函 user_entry_before_ble_init函 user_entry_after_ble_init函 睡眠喚醒用戶接 SDK項目工 燒 基于Keil+J-Link的燒錄方 采用PC燒錄工具+串口進行燒 量產(chǎn)燒 低功耗管 工作模 程序運行流 喚醒條 BLE協(xié)議 GAP GAP事 GAPEventType GAPGATTMTU GAPMessage GAPAdvertisingMode GAPAdvertisingFilterMode GAPScanMode GAPScanResultType GAPScan GAPPairingMode GAPIOCapabilities GAPSecurity GAP函 GAPSetAdvertising GAPSetAdvertising GAPStart GAPStop GAPStart GAPStop GAPConnect GAPCancelConnection GAPGetLocal GAPSetLocal GAPGetConnection GAPGetEncryption GAPSetDevice GAPGetDevice GAPSetDevice GAPGetDevice GAPGetConnection GAPGetLink GAPEnableRSSIreportinreal GATT事 GATT函 GATTAdd GATTAdd Mesh Mesh事 MeshProvisionInputOOB MeshPublishMessage MeshReceiveMessage MeshModel MeshModelMessage NetworkKeyisNOT NetworkKeyis ApplicationKeyisNOT Mesh函 Mesh MeshSet Mesh Mesh MeshModelBind MeshAdd MeshClearInformationIn Security函 GAPBondManager GAPBondManagerDeleteAll GAPBondManagerDeleteSingle GAPSetSecurity GAPSendingPairing GAPPairing GAPEncrypt GAPGetBond GAPSecurity BLE HIDservice事 HIDservice函 DIS事 DIS函 Battery BATT事 BATT函 OTA函 Task函 OSMessage Clock Clock函 OSTimer OSTimer OSTimer Memory Memory函 OS OSGetFreeHeap OSShowMessage OSShowKernelMalloc OSShowMemory MCU外設(shè)驅(qū) IO 普通IO接 IO功能設(shè) IO上拉設(shè) 支持低功耗模式的IO接 IO使能低功耗模 IO關(guān)閉低功耗模 IO低功耗模式功能設(shè) IO低功耗模式輸入輸出設(shè) IO低功耗模式上拉設(shè) IO使能低功耗喚 IO低功耗模式中斷 普通GPIO接 GPIO輸 GPIO設(shè)置整個port輸入輸 GPIO獲取整個port輸入輸出配 GPIO設(shè)置單個IO輸入輸 GPIO低功耗模式輸出 GPIO低功耗模式輸入 UART初始 UART等待發(fā)送FIFO為 從串口數(shù) 從串口發(fā)送數(shù) UART發(fā)送一個字節(jié)且等待完 UART發(fā)送一個字節(jié)且立即返 UART發(fā)送多個字節(jié)且等待完 UART特定個數(shù)字 UART特定個數(shù)字節(jié),諾FIFO為空則先返 UART0讀數(shù) UART0發(fā)數(shù) UART1讀數(shù) UART1寫數(shù) SPI初始 SPI發(fā)送并接 SPI發(fā) SPI接 I2C初始 I2C發(fā)送一個字 I2C發(fā)送多個字 I2C一個字 I2C多個字 Timer初始 Timer啟 Timer停 Timer獲取load Timer獲取當(dāng)前計數(shù) Timer清中 普 接 啟 停 低功 初始 低功 低功 啟 低功 停 ADC初始 ADC開始采 ADC停止采 ADC結(jié) WDT初始 WDT喂 WDT啟 WDT停 WDT中斷處理接 RTC初始 RTC啟 RTC停 RTC中斷處理接 QDEC初始 QDEC設(shè)置引 QDEC設(shè)置清零條 QDEC設(shè)置中斷閥 QDEC設(shè)置中斷類 QDEC去 QDEC旋轉(zhuǎn)計 QDEC中斷處理接 Key KeyScan結(jié)構(gòu)體定 KeyScan參 KeyScan函 KeyScan初始 KeyScan中斷處理接 PMU配置系統(tǒng)電 PMU判斷系統(tǒng)是否第一次上 PMU使能中 PMU關(guān)閉中 PMU使能Codec供 PMU關(guān)閉Codec供 PMU設(shè)置LDO_OUT和IO電壓 PMU設(shè)置32K時鐘 PMU設(shè)置內(nèi)部RC頻 PMUCharger中斷接 PMU低電壓監(jiān)測中斷接 PMU高溫監(jiān)測中斷接 OTA OTA交互包格 OTA主機端的請求包格式(通過write 獲取新固件的可用 獲取當(dāng)前固件版本 擦除扇區(qū) 寫入數(shù) 重啟FR801xH的回復(fù)包格式(通過Notify 獲取新固件的可用 獲取當(dāng)前固件版本 擦除扇區(qū) 寫入數(shù) 重啟 103勘誤記 概包含了BLE5.0的完整協(xié)議棧,的外設(shè)驅(qū)動以及操作系統(tǒng)抽象層OSAL。FR801xHSDK分。MCU外設(shè)驅(qū)動和profile,以及應(yīng)用層的例程代碼,都是以源碼的形式提供,圖中為綠色部分。FR801xHSDK空間分FR801xH的地址空間如下(48KB(48KB(512KB/1MB(128KBFR801xH其中內(nèi)置128KBROM,主要內(nèi)容為啟動代碼、BLEcontroller部分協(xié)議棧;FLASH空間用于用戶程序、用戶數(shù)據(jù)等;RAM用于各種變量、堆棧、重新映射后的中斷向量地址、對運行速度較為敏感的代碼(中斷響應(yīng)等)等,該空間都支持低功耗的retention功能;外設(shè)地址空間是各種外設(shè)的地址映射,用于進行外設(shè)的配置。在FR801xH中FLASH空間和RAM空間的分配由指定,具體分配如下USERAPP(runningspace FR801xHflashRAM其中JUMP_TABLE的是配置信息;APPCODE和RODATA可以通過XIP被MCU直接;CRITICALCODE和EXCEPTIONandINTERRUPTHANDLERflashRAM中;RWDATA需要進行初始化;ZI0SDK內(nèi)部進行處理,用戶無需做額外操作。代碼流LIB中進行部分硬件初LIB中進行baseband和協(xié)議棧的初LIB中進入主SDK包含了四大部分,Application部分,藍牙協(xié)議棧部分,操作系統(tǒng)抽象層OSAL部分MCU外設(shè)驅(qū)動部分。整個代碼結(jié)構(gòu)比較簡單,執(zhí)行流程也很清晰易懂。SDK的main函數(shù)主體位于lib庫中,對于應(yīng)用層以源LIB中進行部分硬件初LIB中進行baseband和協(xié)議棧的初LIB中進入主用戶可以實現(xiàn)該函數(shù)進行profile的,main該函數(shù)示例void{jump_table.addr.addr[0]=0x01;jump_table.addr.addr[1]=0x01;jump_table.addr.addr[2]=0x01;jump_table.addr.addr[3]=0x01;jump_table.addr.addr[4]=0x01;jump_table.addr.addr[5]=jump_table.image_size=0x19000;//100KBjump_table.firmware_version=0x }48M;配置協(xié)議棧中使用的0x30000該函數(shù)示例void{/*setsystempowersupplyinBUCKmode*/||||||該函數(shù)實現(xiàn)了配置供電模式為BUCK,使能了一系列PMU部分的中斷,配置了AT指令所使用的的串口user_entry_after_ble_initbondmanager的初始化,GAP事件處理回調(diào)函數(shù)的,BLE廣播參數(shù)的設(shè)置,GATTservice的創(chuàng)建,用戶task的創(chuàng)建等。user_entry_after_ble_init()在系統(tǒng)使能睡眠后,LIB中主代碼會判斷是否滿足進入睡眠條件,針對開始睡眠前和喚醒后分別提供了供用在系統(tǒng)喚醒后,用戶可以在該函數(shù)中重新進行外設(shè)的初始化(進入睡眠后外設(shè)的狀態(tài)因為掉電都會丟失等操作jump_table結(jié)構(gòu)體中保存了一些配置信息名值功-OTA的備份區(qū)域。例如該值為0x10000,那OTA雙區(qū)域在flash中的址就分別為00x10000。因此該值在一個項-版本號來判斷OTA雙區(qū)域中的代碼哪一個的版本-本機的藍牙系統(tǒng)工作主SDK項目工樣的結(jié)構(gòu),如下圖所示:工程結(jié)applicationprofile等;driver中為外設(shè)驅(qū)動;platform中為異常向量和部分異常的處理函數(shù);patchROMcode中的一些補丁代碼;lib中為封裝好的庫文件,其中所提供的接口在gatt_api.h、gap_api.h等文件中。在當(dāng)前的SDK中提供了一下幾種sample工程HIDMesh主機例程從機例程燒燒錄方式主要有兩種PC燒錄工具+用戶將文件FR8010H.FLM存放在Keil安 下的ARM\Flash路徑中,然后在Keil工程中進行如下配J-Link作為調(diào)試工配置調(diào)試方式為在flashdownload選項卡中配置選通過以上配置就可以實現(xiàn)在KeilIDE中進行flash的調(diào)試和燒錄PC燒錄工具+串口在的J-Link調(diào)試口被復(fù)用成別的功能,或者系統(tǒng)會進入睡眠時,則無法通過上述方法進行燒錄。這時可以采用打開PC端串口燒錄工具,選擇正確的串,導(dǎo)入DAT文件(選擇要燒錄的bin文件),然后打開串口,進入將串口工具的TX連接到PA2(端的RX,RX連接到的PA3(端的TX與時與PC到中注意事項:因為串口工具的TX會串電到端,所以接線連接順序要符合上面的2和3步驟所描述的流程 系列有完善的量產(chǎn)燒錄工具,可以支持燒錄片、也可燒錄PCBA,具體實施方式可以聯(lián)系商低功耗管工作模耗模式,F(xiàn)R801xH支持兩種低功耗模式:工作模深睡深睡眠(RAM不保100%不??蓴?shù)字邏輯(包括外設(shè)資源不保不保RTC等可選保保(Mtin)7AOn,DERC等模塊喚醒,且M中數(shù)據(jù)保持,這種模式適用于正常連接狀態(tài)、或者周期性廣播狀態(tài)等。在這種模式下,喚CUF深睡眠模式下系統(tǒng)底電流大致為4uA(Mtin主程序的運行流程如下圖在該流程中用戶在睡眠前和喚醒后各有一個可以進行自定義的操作該函數(shù)在進入睡眠前被調(diào)用,用戶可在里面實現(xiàn)控制GPIO的狀態(tài)保持(針對GPIO在系統(tǒng)工作和睡眠狀態(tài)下的控制參見外設(shè)驅(qū)動章節(jié)),配置睡眠喚醒條件等行為。在系統(tǒng)喚醒后,用戶可以在該函數(shù)中重新進行外設(shè)的初始化(進入睡眠后外設(shè)的狀態(tài)因為掉電都會丟失等操作睡眠的喚醒有同步和異步兩種:同步喚醒來自一個硬件timer,這個timer的設(shè)置由協(xié)議棧中代碼完成,主要取決于廣播間隔、連接間隔等參數(shù),在應(yīng)用層代碼中無需關(guān)注;異步主要來PMU(電源管理單元)的中斷信號,PMU這兩行代碼可以配置PMU中的GPIO狀態(tài)監(jiān)測模塊開始監(jiān)測GPIO_PD4和GPIO_PD5的狀態(tài),一旦發(fā)生電平高低的變化,就可以產(chǎn)生PMU中斷。如果在睡眠中產(chǎn)生PMU中斷,則系統(tǒng)會被喚醒,喚醒后可在PMU的中斷處理函typedeftypedef{BLE上層應(yīng)用開發(fā)調(diào)用。Profile則是以源碼的形式提供。GAPGAPAPIcomponents\ble\include\gap\gap_api.hGAPGAPEventType//typedef{mtuGAPLinkEstablished//Linkestablishedevent //!<號 //!<對端的mac地址 //!<對端mac地址的類型 //!<握手間隔參數(shù)。單位 //!<lantency參數(shù) //!<超時斷開的參數(shù)。單位}GAPLinkDisconnect//Linkdisconnecteventtypedef{ //!< hl}GAPLinkParameterUpdateReject//Linkparameterupdaterejecteventtypedef{ 號 //!}GAPLinkParameterUpdateSuccess//Linkparameterupdatesuccesseventtypedef{ lantency }GAPAdvertisingReport//Advreportindication //!<收到廣播的類型,見@GAP_SCAN_EVT_TYPE_DEFINES //!<廣播的mac地址。 //!<廣播的 //!<廣播的rssi值。 //!<廣播的數(shù)據(jù)長度uint8_t buffer}GAPPeerFeature//Peerfeaturersptypedef{ //!<事件對應(yīng)的號 feature}GAPGATTMTU//Mtuexchangedeventtypedef{//!<事件對應(yīng)的號//!<mtu}GAPSecurityMasterAuthenticationRequest//Gotauth_reqeventtypedef{ //!<事件對應(yīng)的號 //!<是否要進行加密。0:不加密。1:}GAPMessage//GAPmessageeventtypedef{GATTevent的類型,見 做為slave建立事件對應(yīng)參數(shù)。 收到對端feature回復(fù)時對應(yīng)的參數(shù)。 mtu交換完畢事件對應(yīng)的參數(shù)。 收到對端rssi時的值。 master加密事件對應(yīng)的號 GAPAdvertisingModeGAPAdvertisingType//GAPAdvertisingChannel//GAPAdvertisingFilterMode//GAPAdvertising//Gapadvparametertypedef{廣播的模式,見@廣播的通道選擇。見@廣播的過濾設(shè)置。見@GAPScanMode// //!<scanrsp //!<掃描,不能收到scanrsp包GAPScanResultType//GAPScan//Gapscantypedef{ 掃描的模式,見@ //!<掃描接收到的包是否要過濾重復(fù)包.1:過濾;0:不過濾 //!<掃描間隔。必須大于等于scan_window。范圍4~16384 //!<掃描開窗間隔。范圍4~16384 //!<掃描持續(xù)時間。單位:10ms。0GAPPairingMode// //!< //!<GAPIOCapabilities////!<GAPSecurity//Gapsecuritytypedef{ //!<是否啟用安全。保留。不用填 //!<ble 是否初始化配對,或等待配對。見@ 是否使能配對時的綁定檢查。True //!<GAPGAPSetEventCallbackvoidgap_set_cb_func(gap_callback_func_t {{case{}}}GAPSetAdvertisingvoidgap_set_advertising_param(gap_adv_param_t 2.1.1事件中的gap_adv_param_t類型定義。參數(shù)取值需adv_intv_min需要小于等于adv_intv_maxadv_intv_minadv_intv_max的取值范圍//GAP-Advertisementdata(maxsize=31bytes,thoughthis//bestkeptshorttoconservepowerwhilestaticuint8_tadv_data[]={//serviceUUID,tonotifycentraldeviceswhatservicesare//inthisperipheral.告訴central本機有什么服務(wù),但這里先只放一個主要的. //lengthofthisdata //someoftheUUID's,butnot0xFF,//GAP-Scanresponsedata(maxsize=31bytes,thoughthis//bestkeptshorttoconservepowerwhilestaticuint8_tscan_rsp_data[]={completename //lengthofthis 'S','i','m','p','l','e','','P','e','r','i','p','h','e','r','a',//Txpowerlevel //lengthofthisdata //adv_param.adv_mode=GAP_ADV_MODE_UNDIRECT;adv_param.adv_addr_type=GAP_ADDR_TYPE_PUBLIC;adv_param.adv_chnl_map=GAP_ADV_CHAN_ALL;adv_param.adv_intv_min=300;adv_param.adv_intv_max=300;uint8_tadv_data[]=adv_data;uint8_trsp_data[]=scan_rsp_data;gap_set_advertising_data(adv_data,sizeof(adv_data));GAPSetAdvertisingvoidgap_set_advertising_data(uint8_t*p_adv_data,uint8_t 指向廣播數(shù)據(jù)buffer 廣播數(shù)據(jù)長度值。取值范圍:1~GAPSetAdvertisingResponsevoidgap_set_advertising_rsp_data(uint8_t*p_rsp_data,uint8_t 廣播掃描回復(fù)數(shù)據(jù)長度值。取值范圍:1~GAPStartvoidgap_start_advertising(uint16_t 其他:廣播持續(xù)duration*10msGAPStopvoidGAPStartvoidgap_start_scan(gap_scan_param_t 2.1.1事件中的gap_scan_param_tscan_intv和scan_window0x4 取值范圍為 ~65535其他:掃描持續(xù)duration*10msgap_scan_param_tscan_param;scan_param.dup_filt_pol=0;scan_param.scan_intv=32;//scaneventon-goingtimescan_param.scan_window=20;scan_param.duration=GAPStopvoidBLEcentralobserverperipheraladvertiserGAPConnect central設(shè)備發(fā)起對peripheral設(shè)備的BLE連接。建立時會產(chǎn)生GAP_EVT_SLAVE_CONNECT或 GAP_ADDR_TYPE_PUBLIC structmac_addraddr=GAPCancelConnectionvoid停止正在由gap_start_conn發(fā)起的連接的過程,central設(shè)備發(fā)起。本函數(shù)停止正在進行連接的動作,不是斷開已經(jīng)建立的。正在的動作被停止后,產(chǎn)生GAP_EVT_CONN_END事件。GAPDisconnectvoidgap_disconnect_req(uint8_t 要被斷開連接的號。號從0開始一直到app_config,h定義的最大數(shù)-1GAPGetLocalblelocalmac macbuffmacstructmac_addraddr;show_reg(&addr.addr[0],6,1);//printflocalmacGAPSetLocalvoidgap_address_set(structmac_addrblelocalmac BDADDR。Mac6structmac_addraddr=GAPGetConnectionboolgap_get_connect_status(uint8_t要查詢的號。號從0開始一直到app_config,h定義的最True,該號處于狀--GAPGetEncryptionboolgap_get_encryption_status(uint8_t要查詢的號。號從0開始一直到app_config,h定義的最True,該號處于已加密狀--GAPSetDevicevoidgap_set_dev_name(uint8_t*p_name,uint8_tblegapprofiledevname buff GAPGetDeviceuint8_tuint8_tgap_get_dev_name(uint8_t* 指向設(shè)備名字buffGAPSetDevicevoidgap_set_dev_appearance(uint16_tblegapprofiledevappearance GAPGetDevice 設(shè)備的外觀。見@defgroupGAPGetConnectionuint8_t 0~app_config,hGAPGetLinkvoidgap_get_link_rssi(uint8_trssirssigap_event:GAP_EVT_LINK_RSSI 要查詢的號。號從0開始一直到app_config,h定義的最GAPEnableRSSIreportinrealattribute((section("ram_code")))voidgap_rssi_ind(int8_trssi,uint8_t{co_printf("rssi:link=%d,rssi=%d.\r\n",conidx,} GAPConnectionParametersUpdateGAP_EVT_LINK_PARAM_REJECT 要進行參數(shù)更新的號。號從0開始一直到app_config,h定義的最大數(shù)-1 最小的間隔取值。必須小于等于max_intv。取值大于6。單位:0.625us 最大的間隔取值。取值大于6。單位:0.625us 做為slave角色時,允許忽略握手的間隔個數(shù)。slave_latency*max_intv<=6400 GATTGATTAPIcomponents\ble\include\gatt\gatt_api.hGATTGATTPropertyBitmap//對prop變量值att attwrite_cmd att attwrite_cmd att att attwritewithno//對attnotificationattindication//!<attwrite_with_responseattwrite_without_responseattread//GATTmessageeventstypetypedef{gattattinfo//GATTmessageeventoperationdonetypedef{GATT操作的類型seevoid//GATTmessageeventdatatypedef{ GATTvoid //!<GATT//GATTmessageeventtypedef{GATTevent//!<Gattevent對應(yīng)的GatteventserviceGattevnetattributeidxGatteventGattevent//BLEattributedefineformattypedef{Attribute權(quán)限seeAttributeuint8_tAttributebufferprofileserviceattmax_sizep_datamax_size>0,p_dataNULL。創(chuàng)建profile時內(nèi)部會分配內(nèi)存,并拷貝p_data max_size==0,p_dataNULLatt不能被讀。或者讀該att會返回Nullmax_size==0,p_dataNULLattGATT_PRIMARY_SERVICE_UUID1attidxmax_size填serviceuuidp_dataservice_uuidbufferp_databuffer推薦定義為constramGATTService//Profileservicedefinetypedef{constgatt_attribute_t//!<profileserviceattprofileserviceattprofileservice//Profileclientdefinetypedef{constprofileclientattuuidprofileclientattprofileclient//BLEclientreadtypedef{ //!<Profileclient讀操作對應(yīng)的號 profileclientclient_id profileclientattidxGATTClientEnable//BLEclientenablentftypedef{ //!<Profileclient進行使能ntf操作對應(yīng)的號。 //!<profileclient進行使能ntf操作對應(yīng)的client_id。 //!<profileclient進行使能ntf操作對應(yīng)的attidx號//BLEnotificationtypedef{profileclientnotificationattidxuint8_t//!<profileclientnotification//BLEindicationtypedef{//!<Profileclientindication操作對應(yīng)的號profileclientindicationattidxuint8_t//!<profileclientindicationGATTGATTAdduint8_tgatt_add_service(gatt_service_tprofileservice 0xff,創(chuàng)建失敗profileGATTAddprofileclientclientattuuid均放在一個client 0xff,創(chuàng)建失敗profileGATTChangeServicevoidgatt_change_svc_uuid(uint8_tsvc_id,uint8_tatt_idx,uint8_t*new_uuid,uint8_tprofileserviceattuuid uuidprofile attidx uuidbuffer uuidvoidgatt_change_client_uuid(uint8_tclient_id,uint8_tatt_idx,uint8_t*new_uuid,uint8_tprofileclientattuuid uuidprofile attidx uuidbuffer uuidGATTDiscoverPeerDeviceAllvoidgatt_discover_all_peer_svc(uint8_tclient_id,uint8_t profileclient_id 要進行掃描操作的號。號從0開始一直到app_config,h定義的最大數(shù)-{{case{externuint8_t}}}GATTDiscoverPeerDeviceServiceByperipheral-profileclient_id-要進行掃描操作的號。號從0開始一直到app_config,h定義的最-serviceuuid-serviceuuidvoidgatt_client_write_req(gatt_client_write_t voidgatt_client_write_cmd(gatt_client_write_t {{case{{gatt_client_write_twrite;write.client_id=client_id;write.att_idx=1;write.data_len=7;}}}return}GATTEnablevoidgatt_client_enable_ntf(gatt_client_enable_ntf_t 要進行使能notification{{case{{gatt_client_enable_ntf_tntf_enable;ntf_enable.client_id=client_id;ntf_enable.att_idx=0;}}}return}GATTReadvoidgatt_client_read(gatt_client_read_t {{case{{gatt_client_read_tread;read.client_id=client_id;read.att_idx=0;}}}return}voidgatt_notification(gatt_ntf_tcentralnotificationntf gatt_ntf_tntf_att;ntf_att.att_idx=ntf_att.svc_id=svc_id;ntf_att.data_len=4;ntf_att.p_data=tmp;voidgatt_indication(gatt_ind_t GATTMTUExchangevoidgatt_mtu_exchange_req(uint8_t mtu0開始一直到app_config,hGATTGetnegotiatedMTUuint16_tgatt_get_mtu(uint8_tMTU 要進行mtu交換的號0開始一直到app_config,h GATTdealmessagefromHOST(condition:RTOSRTOSGATTtask,HOSTtasktask 從MeshMesh的相關(guān)APIcomponents\ble\include\mesh\mesh_api.hMeshMeshEventType//Mesheventtypeenum{MeshMesh//!<provisionerresetMeshModelgroup//!<從provisioner收到provisionparameterrequest//!<從provisioner收到authenticationdatarequest//!<收到provision//!<//!<mesh//!<provisionercompositiondatarequest//!<BLEMeshnetworkinformation//Meshnetworkinformationupdateenum{NetworkkeyNetworkkeyApplicationkeyApplicationkeyModelpublicationModelsubscriptionlistModel/applicationkey//!<MeshSupported//Meshsupportedfeaturetypeenum{ Relay Proxy Friendly LowPowerNode //!<GATTbearerMeshProvisionOutputOOB//Meshprovisionoutoobenum{=Bit[0]:=Bit[1]:=Bit[2]:=Bit[3]:=Bit[4]:Bit[5-15]:MeshProvisionInputOOB///InputOOBActionfieldenum{=Bit[0]:=Bit[1]:=Bit[2]:=Bit[3]:Bit[4-15]:MeshProvision//Meshprovisionenum{=(1<<//!<unprovisioneddevicebeaconURIHashMeshProvision///Stateoftheenum{ProvisioningProvisioningProvisioningMeshPublishMessage//Meshpublishmessagetypetypedef{ Elementindex ModelID Operationcode(1,2or3operationcode) //!< //!<}MeshResponseMessage//Meshresponsemessagetypetypedef{ Appkey operationcode(1,23operation }MeshReceiveMessage//Meshreceivemessagetypetypedef{ ModelID Operationcode(1,2or3operationcode) //!< //!<}MeshModel//Meshmodeltypedef{ModelIDSIGmodelmodel//!<Elementindex}MeshProvisionStateChange//MeshProvisioningstatechangetypedef{ Provision狀態(tài)。(@seeenum Provision}MeshModelMessage//Informreceptionofaspecificmeshtypedef{ Modelid elementindex AppKeyLocalidentifierRequiredforaresponse) //!<PDURSSI 1=0=relay Operationcode(1,2or3字節(jié)長度的operationcode) //!<消息源設(shè)備的地址。(Requiredfora //!<const //!<}NetworkKeyisNOT//Networkkeyinformationentrystructureifnetworkkeyisnotbeingtypedef{//!<Entry//!<//!<NetKey//!<Network}NetworkKeyis//Networkkeyinformationentrystructureifnetworkkeyisbeingtypedef{//!<Entry//!<//!<NetKey//!<Network//!<NewnetworkApplicationKeyisNOT//Applicationkeyinformationentrystructureifapplicationkeyisnotbeingtypedef{//!<Entry//!<//!<NetKey//!<AppKey//!<Network}ApplicationKeyis//Applicationkeyinformationentrystructureifapplicationkeyisbeingtypedef{//!<Entry//!< //!<NetKey //!<AppKey //!<Network //!<NewnetworkModelpublicationparameterforNOTvirtualpublication//Modelpublicationparameterentrystructureifpublicationaddressisnotavirtualtypedef{//!<Entry//!<//!<Element//!<Model//!<Publication//!<AppKey//!<//!<//!<Retransmission//!<FriendModelpublicationparameterforvirtualpublication//Modelpublicationparameterentrystructureifpublicationaddressisavirtualtypedef{//!<Entry//!<//!<Element//!<Model//!<Publication//!<AppKey//!<//!<//!<Retransmission//!<Friend//!<LabelModelsubscription//Modelsubscriptionlistentrytypedef{//!<Entry//!<//!<Element//!<Model//!<Keybinding//Model/Applicationkeybindingentrytypedef{//!<Entry//!<//!<Element//!<Model//!<ListofAppKeytypedef{//!<Update//!<Entry//!<EntryMeshEvent//Mesheventtypedef{enumMesh{ Provision //!<key Meshmodel //!<Meshcompositiondatarequestpage。 //!<BLE廣播包內(nèi)容。}}MeshMeshSetApplicationCallbackvoidmesh_set_cb_func(mesh_callback_func_t Meshmesh meshlinkflashmeshlinknetworkkey,appkey,binding信息等。詳細參考4.3.1章節(jié)mesh_feature_t。MeshSetvoidMeshvoidMeshvoidmeshMeshModelBindmodelappkeyappkeyprovisioner 需要被綁定appkey的model。 model歸屬的element。 MeshModelSubscribeGroupvoidmesh_model_sub_group_addr(uint32_tmodel_id,uint8_telement,uint16_tmodelmodelgroup_addr MeshAddvoidmesh_add_model(constmesh_model_t MeshPublishvoidmesh_publish_msg(mesh_publish_msg_t MeshSendResponsevoidmesh_send_rsp(mesh_rsp_msg_t voidmesh_send_prov_param_rsp(uint8_t*uuid,uint32_turi_hash,uint16_toob_info,uint8_tpub_key_oob,uint8_tstatic_oob,uint8_tout_oob_size,uint8_tin_oob_size,uint16_tout_oob_action,uint16_tin_oob_action,uint8_tnb_elt,uint8_tprovisionrequest的回復(fù)。Provisionrequestprovisioner uri_hash oob信息。 Staticoob信息。 Outoobsize。 Inoobsize。 Inoobaction。 MeshProvisionAuthenticationDatavoidmesh_send_prov_auth_data_rsp(uint8_taccept,uint8_tauth_size,uint8_t MeshCompositionData compositiondatarequest MeshStoreInformationIntovoid至少2秒之后再調(diào)用此函數(shù)。MeshClearInformationInvoidSecuritySecurityAPI也位于components\ble\include\gap\gap_api.h文件Security函GAPBondManagervoidgap_bond_manager_init(uint32_tflash_addr,uint32_tsvc_flash_addr,uint8_tmax_dev_num,booluser_entry_before_ble_init()函數(shù)調(diào)用 指定綁定設(shè)備服務(wù)信息的flash地址,地址必須是4096整數(shù)倍。 指定最大能支持的綁定設(shè)備的個數(shù)。取值1~app_config,h定義的最大數(shù)。 是否啟用該功能。True,啟用綁定管理功能。False,綁定管理功能。GAPBondManagerDeleteAllvoiduser_entry_before_ble_init()函數(shù)調(diào)用GAPBondManagerDeleteSinglevoidgap_bond_manager_delete(uint8_t*mac_addr,uint8_tuser_entry_before_ble_init()函數(shù)調(diào)用GAPSetSecurityvoidgap_security_param_init(gap_security_param_t等。 gap_security_param_tparam{.mitm=.io_cap=.pair_init_mode=.bond=.password=GAPSendingPairingvoidgap_security_send_pairing_password(uint32_tconidx,uint32_tpin 號。號從0開始一直到app_config,h定義的最 GAPPairingvoidgap_security_pairing_req(uint8_t事件。 要發(fā)起綁定的號。號從0開始一直到app_config,h定義的最大數(shù)-1GAPEncryptvoidgap_security_enc_req(uint8_t操作。加密成功后,會產(chǎn)生GAP_SEC_EVT_MASTER_ENCRYPT事件。 要發(fā)起綁定的號。號從0開始一直到app_config,h定義的最大數(shù)-1GAPGetBondbool {{case{if}}}GAPSecurityvoidgap_security_req(uint8_t 要發(fā)送請求的號。號從0開始一直到app_config,h定義的最{{case{}}}BLESDK里面以源碼的形式實現(xiàn)了BLE常用profile,供用戶參考和修改。Profile可以在SDK安\components\ble\profiles下找到HumanInterfaceDevice。HID主要用于BLE鼠標(biāo)鍵盤和的開發(fā)HIDservicehid_service.c文件中。HIDserviceservice定義和一系列特征值定義。HIDservice的特征值主要包含reportmapHID的input,outputreport這些特征值的內(nèi)容可以根據(jù)不HID設(shè)備呈現(xiàn)出不同內(nèi)容。SDKHIDservice//HIDDevicekeyboard備//!<hid//!<hidhidserverHIDinformationflags.const變量hid_info_value,HID_INFORMATION_UUID讀時的返回 //!<hidinformation標(biāo)志位:可喚 hidinformationHIDprotocolmodevalues.PROTOCOL_MODE_UUID讀時的返回 //!<BootProtocolMode //!<ReportProtocolMode//對reportid//HIDreportmaptypedef{ ReportIDreportmap ReportTypereportid的屬性。參見HIDservicevoidhidserverprofile 要進行操作的號。號從0開始一直到app_config,h定義的最大數(shù)- 要進行操作的hid_rpt_info數(shù)組的序號。hid_rpt_info數(shù)組在hid_gatt_add_service()創(chuàng)建時賦值。內(nèi)部[2reportid33]賦值為reportid3 DeviceInformationService。提供設(shè)備的產(chǎn)品信息以及軟硬件版本。代碼位于中DIS8設(shè)備模組名字string5SystemID8SystemID5設(shè)備PNP_ID定義7設(shè)備PNP_ID長度string5string設(shè)備IEEE數(shù)據(jù)定義6IEEE//Dissserverprofiledissserverdissserverdissserverdissserverdissserverdissserverdissserver包含Systemdissserver包含IEEEdissserver包含dissserverDISvoiddeviceinformationprofileBatteryBattery 用于實時電池電量。代碼位于components\ble\profiles\ble_batt中BATT//BatteryServerProfileattributestypedef{//!<Battserver//!<Battserverlevelcharact//!<Battserverlevelcharact//!<Battserverlevelcharact//!<BattserveridxBATTvoidbattserverprofilevoidbatt_gatt_notify(uint8_tconidx,uint8_t 要進行操作的號。號從0開始一直到app_config,h定義的最 OverTheAirdownload,空中固件升級。代碼位于components\ble\profiles\ble_otaOTAvoidOTAprofileOSAL 中Task位于components\modules\os\include\os_task.hTask函OSTaskuint16_tos_task_create(os_task_func_t 創(chuàng)建任務(wù)的id號,{{casecase1}return}void{user_task_id=}OSTaskvoidos_task_delete(uint8_t-OSMessagevoidos_msg_post(uint16_td
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 工程機械車輛維修方案招標(biāo)文件
- 特色幼兒園教師聘用協(xié)議
- 電影院放映員聘用合同
- 高速公路設(shè)施招投標(biāo)管理規(guī)定
- 工業(yè)園區(qū)施工合同
- 債務(wù)清償合同樣本
- 旅游景區(qū)食堂后勤招聘合同
- 2024年土地承包經(jīng)營權(quán)變更合同參考文本3篇
- 餐飲業(yè)員工解聘合同模板
- 農(nóng)村文化車輛出入管理方法
- 出租房屋安全檢查制度模版(2篇)
- 《森林防火安全教育》主題班會 課件
- 漏洞修復(fù)策略優(yōu)化
- 乘風(fēng)化麟 蛇我其誰 2025XX集團年終總結(jié)暨頒獎盛典
- 車間生產(chǎn)現(xiàn)場5S管理基礎(chǔ)知識培訓(xùn)課件
- 2024年同等學(xué)力申碩英語考試真題
- 文書模板-《公司與村集體合作種植協(xié)議書》
- 碼頭安全生產(chǎn)知識培訓(xùn)
- 《死亡詩社》電影賞析
- JJF(京) 105-2023 網(wǎng)絡(luò)時間同步服務(wù)器校準規(guī)范
- 老年科護理查房護理病歷臨床病案
評論
0/150
提交評論