讲义说明案例_第1页
讲义说明案例_第2页
讲义说明案例_第3页
讲义说明案例_第4页
讲义说明案例_第5页
已阅读5页,还剩100页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

FR801xHSDKUserBluetoothLowEnergySOCwithSIG2020-03概 FR801xHSDK结 空间分 地址空 空间分 代码流 user_custom_parameters函 user_entry_before_ble_init函 user_entry_after_ble_init函 睡眠唤醒用户接 SDK项目工 烧 基于Keil+J-Link的烧录方 采用PC烧录工具+串口进行烧 量产烧 低功耗管 工作模 程序运行流 唤醒条 BLE协议 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外设驱 IO 普通IO接 IO功能设 IO上拉设 支持低功耗模式的IO接 IO使能低功耗模 IO关闭低功耗模 IO低功耗模式功能设 IO低功耗模式输入输出设 IO低功耗模式上拉设 IO使能低功耗唤 IO低功耗模式中断 普通GPIO接 GPIO输 GPIO设置整个port输入输 GPIO获取整个port输入输出配 GPIO设置单个IO输入输 GPIO低功耗模式输出 GPIO低功耗模式输入 UART初始 UART等待发送FIFO为 从串口数 从串口发送数 UART发送一个字节且等待完 UART发送一个字节且立即返 UART发送多个字节且等待完 UART特定个数字 UART特定个数字节,诺FIFO为空则先返 UART0读数 UART0发数 UART1读数 UART1写数 SPI初始 SPI发送并接 SPI发 SPI接 I2C初始 I2C发送一个字 I2C发送多个字 I2C一个字 I2C多个字 Timer初始 Timer启 Timer停 Timer获取load Timer获取当前计数 Timer清中 普 接 启 停 低功 初始 低功 低功 启 低功 停 ADC初始 ADC开始采 ADC停止采 ADC结 WDT初始 WDT喂 WDT启 WDT停 WDT中断处理接 RTC初始 RTC启 RTC停 RTC中断处理接 QDEC初始 QDEC设置引 QDEC设置清零条 QDEC设置中断阀 QDEC设置中断类 QDEC去 QDEC旋转计 QDEC中断处理接 Key KeyScan结构体定 KeyScan参 KeyScan函 KeyScan初始 KeyScan中断处理接 PMU配置系统电 PMU判断系统是否第一次上 PMU使能中 PMU关闭中 PMU使能Codec供 PMU关闭Codec供 PMU设置LDO_OUT和IO电压 PMU设置32K时钟 PMU设置内部RC频 PMUCharger中断接 PMU低电压监测中断接 PMU高温监测中断接 OTA OTA交互包格 OTA主机端的请求包格式(通过write 获取新固件的可用 获取当前固件版本 擦除扇区 写入数 重启FR801xH的回复包格式(通过Notify 获取新固件的可用 获取当前固件版本 擦除扇区 写入数 重启 103勘误记 概包含了BLE5.0的完整协议栈,的外设驱动以及操作系统抽象层OSAL。FR801xHSDK分。MCU外设驱动和profile,以及应用层的例程代码,都是以源码的形式提供,图中为绿色部分。FR801xHSDK空间分FR801xH的地址空间如下(48KB(48KB(512KB/1MB(128KBFR801xH其中内置128KBROM,主要内容为启动代码、BLEcontroller部分协议栈;FLASH空间用于用户程序、用户数据等;RAM用于各种变量、堆栈、重新映射后的中断向量地址、对运行速度较为敏感的代码(中断响应等)等,该空间都支持低功耗的retention功能;外设地址空间是各种外设的地址映射,用于进行外设的配置。在FR801xH中FLASH空间和RAM空间的分配由指定,具体分配如下USERAPP(runningspace FR801xHflashRAM其中JUMP_TABLE的是配置信息;APPCODE和RODATA可以通过XIP被MCU直接;CRITICALCODE和EXCEPTIONandINTERRUPTHANDLERflashRAM中;RWDATA需要进行初始化;ZI0SDK内部进行处理,用户无需做额外操作。代码流LIB中进行部分硬件初LIB中进行baseband和协议栈的初LIB中进入主SDK包含了四大部分,Application部分,蓝牙协议栈部分,操作系统抽象层OSAL部分MCU外设驱动部分。整个代码结构比较简单,执行流程也很清晰易懂。SDK的main函数主体位于lib库中,对于应用层以源LIB中进行部分硬件初LIB中进行baseband和协议栈的初LIB中进入主用户可以实现该函数进行profile的,main该函数示例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;配置协议栈中使用的0x30000该函数示例void{/*setsystempowersupplyinBUCKmode*/||||||该函数实现了配置供电模式为BUCK,使能了一系列PMU部分的中断,配置了AT指令所使用的的串口user_entry_after_ble_initbondmanager的初始化,GAP事件处理回调函数的,BLE广播参数的设置,GATTservice的创建,用户task的创建等。user_entry_after_ble_init()在系统使能睡眠后,LIB中主代码会判断是否满足进入睡眠条件,针对开始睡眠前和唤醒后分别提供了供用在系统唤醒后,用户可以在该函数中重新进行外设的初始化(进入睡眠后外设的状态因为掉电都会丢失等操作jump_table结构体中保存了一些配置信息名值功-OTA的备份区域。例如该值为0x10000,那OTA双区域在flash中的址就分别为00x10000。因此该值在一个项-版本号来判断OTA双区域中的代码哪一个的版本-本机的蓝牙系统工作主SDK项目工样的结构,如下图所示:工程结applicationprofile等;driver中为外设驱动;platform中为异常向量和部分异常的处理函数;patchROMcode中的一些补丁代码;lib中为封装好的库文件,其中所提供的接口在gatt_api.h、gap_api.h等文件中。在当前的SDK中提供了一下几种sample工程HIDMesh主机例程从机例程烧烧录方式主要有两种PC烧录工具+用户将文件FR8010H.FLM存放在Keil安 下的ARM\Flash路径中,然后在Keil工程中进行如下配J-Link作为调试工配置调试方式为在flashdownload选项卡中配置选通过以上配置就可以实现在KeilIDE中进行flash的调试和烧录PC烧录工具+串口在的J-Link调试口被复用成别的功能,或者系统会进入睡眠时,则无法通过上述方法进行烧录。这时可以采用打开PC端串口烧录工具,选择正确的串,导入DAT文件(选择要烧录的bin文件),然后打开串口,进入将串口工具的TX连接到PA2(端的RX,RX连接到的PA3(端的TX与时与PC到中注意事项:因为串口工具的TX会串电到端,所以接线连接顺序要符合上面的2和3步骤所描述的流程 系列有完善的量产烧录工具,可以支持烧录片、也可烧录PCBA,具体实施方式可以联系商低功耗管工作模耗模式,FR801xH支持两种低功耗模式:工作模深睡深睡眠(RAM不保100%不保可数字逻辑(包括外设资源不保不保RTC等可选保保(Mtin)7AOn,DERC等模块唤醒,且M中数据保持,这种模式适用于正常连接状态、或者周期性广播状态等。在这种模式下,唤CUF深睡眠模式下系统底电流大致为4uA(Mtin主程序的运行流程如下图在该流程中用户在睡眠前和唤醒后各有一个可以进行自定义的操作该函数在进入睡眠前被调用,用户可在里面实现控制GPIO的状态保持(针对GPIO在系统工作和睡眠状态下的控制参见外设驱动章节),配置睡眠唤醒条件等行为。在系统唤醒后,用户可以在该函数中重新进行外设的初始化(进入睡眠后外设的状态因为掉电都会丢失等操作睡眠的唤醒有同步和异步两种:同步唤醒来自一个硬件timer,这个timer的设置由协议栈中代码完成,主要取决于广播间隔、连接间隔等参数,在应用层代码中无需关注;异步主要来PMU(电源管理单元)的中断信号,PMU这两行代码可以配置PMU中的GPIO状态监测模块开始监测GPIO_PD4和GPIO_PD5的状态,一旦发生电平高低的变化,就可以产生PMU中断。如果在睡眠中产生PMU中断,则系统会被唤醒,唤醒后可在PMU的中断处理函typedeftypedef{BLE上层应用开发调用。Profile则是以源码的形式提供。GAPGAPAPIcomponents\ble\include\gap\gap_api.hGAPGAPEventType//typedef{mtuGAPLinkEstablished//Linkestablishedevent //!<号 //!<对端的mac地址 //!<对端mac地址的类型 //!<握手间隔参数。单位 //!<lantency参数 //!<超时断开的参数。单位}GAPLinkDisconnect//Linkdisconnecteventtypedef{ //!< hl}GAPLinkParameterUpdateReject//Linkparameterupdaterejecteventtypedef{ 号 //!}GAPLinkParameterUpdateSuccess//Linkparameterupdatesuccesseventtypedef{ lantency }GAPAdvertisingReport//Advreportindication //!<收到广播的类型,见@GAP_SCAN_EVT_TYPE_DEFINES //!<广播的mac地址。 //!<广播的 //!<广播的rssi值。 //!<广播的数据长度uint8_t buffer}GAPPeerFeature//Peerfeaturersptypedef{ //!<事件对应的号 feature}GAPGATTMTU//Mtuexchangedeventtypedef{//!<事件对应的号//!<mtu}GAPSecurityMasterAuthenticationRequest//Gotauth_reqeventtypedef{ //!<事件对应的号 //!<是否要进行加密。0:不加密。1:}GAPMessage//GAPmessageeventtypedef{GATTevent的类型,见 做为slave建立事件对应参数。 收到对端feature回复时对应的参数。 mtu交换完毕事件对应的参数。 收到对端rssi时的值。 master加密事件对应的号 GAPAdvertisingModeGAPAdvertisingType//GAPAdvertisingChannel//GAPAdvertisingFilterMode//GAPAdvertising//Gapadvparametertypedef{广播的模式,见@广播的通道选择。见@广播的过滤设置。见@GAPScanMode// //!<scanrsp //!<扫描,不能收到scanrsp包GAPScanResultType//GAPScan//Gapscantypedef{ 扫描的模式,见@ //!<扫描接收到的包是否要过滤重复包.1:过滤;0:不过滤 //!<扫描间隔。必须大于等于scan_window。范围4~16384 //!<扫描开窗间隔。范围4~16384 //!<扫描持续时间。单位: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类型定义。参数取值需adv_intv_min需要小于等于adv_intv_maxadv_intv_minadv_intv_max的取值范围//GAP-Advertisementdata(maxsize=31bytes,thoughthis//bestkeptshorttoconservepowerwhilestaticuint8_tadv_data[]={//serviceUUID,tonotifycentraldeviceswhatservicesare//inthisperipheral.告诉central本机有什么服务,但这里先只放一个主要的. //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 指向广播数据buffer 广播数据长度值。取值范围:1~GAPSetAdvertisingResponsevoidgap_set_advertising_rsp_data(uint8_t*p_rsp_data,uint8_t 广播扫描回复数据长度值。取值范围:1~GAPStartvoidgap_start_advertising(uint16_t 其他:广播持续duration*10msGAPStopvoidGAPStartvoidgap_start_scan(gap_scan_param_t 2.1.1事件中的gap_scan_param_tscan_intv和scan_window0x4 取值范围为 ~65535其他:扫描持续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设备发起对peripheral设备的BLE连接。建立时会产生GAP_EVT_SLAVE_CONNECT或 GAP_ADDR_TYPE_PUBLIC structmac_addraddr=GAPCancelConnectionvoid停止正在由gap_start_conn发起的连接的过程,central设备发起。本函数停止正在进行连接的动作,不是断开已经建立的。正在的动作被停止后,产生GAP_EVT_CONN_END事件。GAPDisconnectvoidgap_disconnect_req(uint8_t 要被断开连接的号。号从0开始一直到app_config,h定义的最大数-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* 指向设备名字buffGAPSetDevicevoidgap_set_dev_appearance(uint16_tblegapprofiledevappearance GAPGetDevice 设备的外观。见@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 要进行参数更新的号。号从0开始一直到app_config,h定义的最大数-1 最小的间隔取值。必须小于等于max_intv。取值大于6。单位:0.625us 最大的间隔取值。取值大于6。单位:0.625us 做为slave角色时,允许忽略握手的间隔个数。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对应的GatteventserviceGattevnetattributeidxGatteventGattevent//BLEattributedefineformattypedef{Attribute权限seeAttributeuint8_tAttributebufferprofileserviceattmax_sizep_datamax_size>0,p_dataNULL。创建profile时内部会分配内存,并拷贝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读操作对应的号 profileclientclient_id profileclientattidxGATTClientEnable//BLEclientenablentftypedef{ //!<Profileclient进行使能ntf操作对应的号。 //!<profileclient进行使能ntf操作对应的client_id。 //!<profileclient进行使能ntf操作对应的attidx号//BLEnotificationtypedef{profileclientnotificationattidxuint8_t//!<profileclientnotification//BLEindicationtypedef{//!<Profileclientindication操作对应的号profileclientindicationattidxuint8_t//!<profileclientindicationGATTGATTAdduint8_tgatt_add_service(gatt_service_tprofileservice 0xff,创建失败profileGATTAddprofileclientclientattuuid均放在一个client 0xff,创建失败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定义的最大数-{{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的相关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状态。(@seeenum Provision}MeshModelMessage//Informreceptionofaspecificmeshtypedef{ Modelid elementindex AppKeyLocalidentifierRequiredforaresponse) //!<PDURSSI 1=0=relay Operationcode(1,2or3字节长度的operationcode) //!<消息源设备的地址。(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广播包内容。}}MeshMeshSetApplicationCallbackvoidmesh_set_cb_func(mesh_callback_func_t Meshmesh meshlinkflashmeshlinknetworkkey,appkey,binding信息等。详细参考4.3.1章节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的回复。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秒之后再调用此函数。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()函数调用 指定绑定设备服务信息的flash地址,地址必须是4096整数倍。 指定最大能支持的绑定设备的个数。取值1~app_config,h定义的最大数。 是否启用该功能。True,启用绑定管理功能。False,绑定管理功能。GAPBondManagerDeleteAllvoiduser_entry_before_ble_init()函数调用GAPBondManagerDeleteSinglevoidgap_bond_manager_delete(uint8_t*mac_addr,uint8_tuser_entry_before_ble_init()函数调用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事件。 要发起绑定的号。号从0开始一直到app_config,h定义的最大数-1GAPEncryptvoidgap_security_enc_req(uint8_t操作。加密成功后,会产生GAP_SEC_EVT_MASTER_ENCRYPT事件。 要发起绑定的号。号从0开始一直到app_config,h定义的最大数-1GAPGetBondbool {{case{if}}}GAPSecurityvoidgap_security_req(uint8_t 要发送请求的号。号从0开始一直到app_config,h定义的最{{case{}}}BLESDK里面以源码的形式实现了BLE常用profile,供用户参考和修改。Profile可以在SDK安\components\ble\profiles下找到HumanInterfaceDevice。HID主要用于BLE鼠标键盘和的开发HIDservicehid_service.c文件中。HIDserviceservice定义和一系列特征值定义。HIDservice的特征值主要包含reportmapHID的input,outputreport这些特征值的内容可以根据不HID设备呈现出不同内容。SDKHIDservice//HIDDevicekeyboard备//!<hid//!<hidhidserverHIDinformationflags.const变量hid_info_value,HID_INFORMATION_UUID读时的返回 //!<hidinformation标志位:可唤 hidinformationHIDprotocolmodevalues.PROTOCOL_MODE_UUID读时的返回 //!<BootProtocolMode //!<ReportProtocolMode//对reportid//HIDreportmaptypedef{ ReportIDreportmap ReportTypereportid的属性。参见HIDservicevoidhidserverprofile 要进行操作的号。号从0开始一直到app_config,h定义的最大数- 要进行操作的hid_rpt_info数组的序号。hid_rpt_info数组在hid_gatt_add_service()创建时赋值。内部[2reportid33]赋值为reportid3 DeviceInformationService。提供设备的产品信息以及软硬件版本。代码位于中DIS8设备模组名字string5SystemID8SystemID5设备PNP_ID定义7设备PNP_ID长度string5string设备IEEE数据定义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 创建任务的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. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论