版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、中电港:钟志峰BDF001一步步教您如何在 DA14580 cust profile基础上实现大量notify的发送文档版本:V0.0.1本文主要介绍如何在 DA14580 SDK5.0.3勺prox_reporter例子基础上添加cust profile,并最终利用notify给手机发送大量数据。主要的内容分三个部分:1. cust profile 的添加;2. conn param update 代码添加;3. 大量Notify数据发送丢包严重问题缓解。 需要准备的工具:1. DA14580开发板,或者其他可以运行代码的DA14580板子;2. 基本的软件开发环境,如 Keil等;3. 支
2、持BLE的手机或者其他平台。以上工具是DA14580开发必备,如果没有,请自行百度相关资料解决。 准备工作完毕后,我们就可以开始了:一、cust profile 的添加。首先我们来看看cust profile添加完毕后的结果,用lightblue搜索并与芯片建 立连接后,会出现以下服务:中国熊通宇 1500 独< LighlB;ue PeriptieralCloneO6C卿A022 7C32FS334FO1硫 Haaa0;9084B9A3000C 49D6-9103 Si>5a6?3FDMl沁s: Read Write11 JOt -9115-t/DCei F&ycwPYo
3、pefthes: YWite7 45F5 9S0A B3EB6A065G8SRwertes: Read Mo昨UUiD;EDFEC62E-99.BDA6932A2FQk1 F?E1D1C 101 MSI a i716-1S14131Z1110Writs2B2A沖泊划携 符対能2凸1益 出:ReadMF3E3C3C-3B3A 39M-3 736-3534333S3130翻:Reea Mo納Log 首先,我们打开prox_reporter工程,然后,添加cust service服务所必须文件到 我们的工程中:E 口 blej73 q sdlc_pn>file5ba ss.cb巧旨亞kKdi.
4、cdissjask.cproxr.cproxr_taslc.c1 prf_irtil5,c1 tp otar. ccustsl.cJcu stslJaskiCCU5t£>IYl_C0tYimon.Cattm db 123.cra 这几个文件分别在以下位置:sdkble_stackprofilescustomcustscusts1.c sdkble_stackprofilescustomcustscusts1_task.c sdkble_stackprofilescustomcustom_commo n.c sdkble_stackhostattattmattm_db_128.c
5、然后我们在prox_reportersrcconfig文件夹中建立一个新文件 user_custs_config.h并加入到工程中:3 U5.er_c onfigj dal45fia_config_3 dvanc t1 d al458K_c o nfi g_b a sic, h _1 useracs litart_ccirrfig ,h _) 5er_config.li1 user_nn Qdulw_«nfig.h1 user_periph_setup.h ser_profile5_config<h sereo n fi g sw ver. hLKErjzusU-fcirtfi
6、gJin LAur nlfltfnrm完毕后,我们在工程属性中加入一个宏定义,以便后续方便查找我们本次修改的 代码,当然,你也可以不加此宏定义:25好了,现在开始我们添加代码。首先打开user_proxr.c文件,并加入以下代码:其中char_value我们用作存放read和write数据的地方,notify_timer作为发 送notify的定时器。在user_proxr.c文件的最后面,加入以下4个函数:-:-f =iei T:cBT CUSI 2站亡207_203209vcil.3. userapp onconnectlon (口工血匸已匸 conne ctl onjLdx tstzLi
7、crt gap- a a me ct ±011 req 二 nci const *paxan210 Al22 Q221 l+J331void user c:pp qti disconnect ( st rue 匸 gape discgziTieGt; i口 d const *paraiu void use匚 tnInit Gornplete ( uroid )232氏上240241242243244 厂$270void user caitch rest hndl i ke msg id t cosstde3t_idf3EG_ld)其中,user_app_on_connection用来
8、定义连接建立后需要添加的代码; user_app_o n_disc onnect 为连接断开后需要做的工作;user_o n_db_i ni t_complete为database初始化完毕后的接口函数;user_catch_rest_hndl我们用来处理由主 机(可以是手机)往下发送的 msg,这里我们用来处理 CUSTS1_VAL_WRITE_IND 请求。我们来一步步添加每一个函数体:2CS2C921021121221321 专 F:215216217ZU219 -vcid user_app_on_conrecT:ian (uintS_t comecticn_idxrsti net ca
9、pe ccnneet lsn re a md eanst *paraM)def aul匸 app on connecLrlQn iconnecL-lcn idix, paran;if (n口匸i:£y timer !=EASY TIMER INVJLLID TIMERapp_e a s t imee1;notify tlner-EASY TIMER INVALID TIMER;noclly_cimer =(1 :oo, nGtily_characLerL13clc_up口m匸色$;Default_app_on_c onn ection为系统默认的conn ection处理函数,我们保
10、留它的 所有功能,接下去我们开启notify_timer,利用的是app_easy_timer,这个函数是SDK5里面新的设置定时器的函数,如果用老的SDK是没有这个函数的,可以利用其它的方法实现;函数的第一个参数1000,我们设置了定时器触发的时间为 1000*10ms 也就是 10s,第二个参数 notify_charactertistic_update 为触发时调用的函数,一旦定时器到达10s,则会直接跳转到 notify_charactertistic_update 函数。-*parair )523 varci user app on drsconnect ( m匸工uct gape
11、discorLTiecl; ind canst221 F222 de fault_app_on_d is connect (paran:);223224225 A226227if (noLify_tiirer =EA5Y_TIKER_INVALTD_TIMER - _ _ -app_e a s y_t ime r_c an ce1(nocify_uimer); notify tiiter=EAS¥ TIMER INVALID TIMER;按照字面理解,此函数为disco nn ect处理函数,同样的道理,我们保留 default_app_on_disconnect的所有功能,然后我们
12、关闭之前开启的timer,因为连 接端口后,再发送notify是没有任何意义的。wsid us*r an da ihit:( void )2 32H233defaulton db init ccaplete()""屿235/ Se xrixial Values inaetMib att* ClJST i nx 良宦应u cmjlr2M一 一 一一DEF SWT CHAR LEX, (Hint6 t *|fiGhai value;239>此函数只在database完成初始化后调用一次,这里我们设置了之前定义的 char_value值到数据库中,以便主机发起read请求后
13、能够得到有效数据。咖243344咖247逊251522532»2S7迢J>6122亦 d4S 2£r -_i J -kse r 氐 t 二h i t h±Lc£l ke. 皿上 刁 xd 診 tz s t rasq k rvaid eanuc "parw*p cisar 5 艺die st i-d ,jcs t s.sjr ±d t ccn-z sr z £dELt "SEITiSaiCIzftie usisa vai write iwd;t = Jc3l_vlte_±L 1 cJLdtwiznM
14、I贾ag'jpflTB->haai51e)<=a-= CUBT_I DK_XR I TI_ZHAE_VikL: I_卡* Zed n亡w v«l1 Gif: battd onvalii wq:jF«-rM->H4 u-c 0 / taf: Jac e Mm丄丄已 Le. CaLaLseSt ££4_“;=_¥ Blue 质y a 1_ejl¥ ” dhdl * E號工rX_;lE2_H3_V3匚FDEF_CDST_CHJtR_LEWf (unie®_e *) LfftaT_vaLc.fi)-fiir
15、sate*;67 二揶 此函数处理主机发送的消息,这里只处理CUSTS1_VAL_WRITENDfe们将得到的数据写入char_value,并用attmdb_att_set_value函数将数据更新到底层。然后在 user_app_on_connection上面添力卩timer回调函数:此函数里面暂时只做一件事情:开启一个10ms的定时器,回调函数是它自己, 也就是说每10ms调用一次此函数。后续我们会利用此函数来发送 Notify,现在 暂时留空。好了,user_proxr.c文件的工作暂时结束,然后在user_proxr.h中添加函数声明:0TWT_CU5T_5VUf 1 vzsin u.
16、jbez_app_an_z nnection (uJ_ntf!;_t: 二口r:e-ct.xon_id.3cr 3triact gap=_ = cr:nectj.口n rsqinzL u口ust *paranj G2 vid use*:_srip_M_disc.tnnect ( at rue- ar c_di3conns c*_ir:d conat esreai l : 3 a u»cz_cin_!iD_iai"_ccKElexc: i voii > rv;i.ia工 cAzch cu ndi(k« r»j 11 匸 ccnsti£5vo
17、id const, "pia:匸hjEj,66e_-ta3 k_x E±_e ccriJt de3t_id,fi7室e tak la c ccsat sis 二m ,<9 t«ELdlf_ 一接下去在user_profiles_config.h中添加代码:wu£er_prQxir>c|>tInclude proxr.hn.nclHspo匸ar.hTznclde "tass.ri1"140414244 gtifJef T)cBT_CUST_SVC4546#include "cusesI .rr #endifu
18、prvfrl«_C'g nfig. h_ j boDt_vector&.s102 3jk1£de f TkET CTST_SfC20310410510fi10720910511D孚廿旦 13L:r.色 LT5EK ADVirtii'lt D耳t芯XDV_TYP E_CCfcPLETE_LI 3T_16BIT_BERVI CE_IES ZtxpoweO erviceADVUOID 5POTAR 3ERVTCEX_ _JLDV_T¥PE_C0WPL£TE_LIST_128BIT_SEfiVICE_lDS iiiFxZAv kS5曲贰J
19、iBU xE6 a! Lk52. kACXmOBXaLCteLae#US EP ADVERTISE DA.T.&.2L2113115116117AOV_T¥PE_COPLET!:_LIST_16BIT_5ERVtcE_te3UDI I_LlXE_LOSH_SEk71C£. 'MAT001 ILIMMEDTATE2ALERT_3Em CEXAD匸El I)H_FOWER_JiER琴工 Cf IAW UUID 5 POT AR SERVICE* PROFILE COilFIGUARTICEI修改user_config.h中的广播数据:1 mc r_prof il
20、 cs_ co nili g. h_j bDai.YicdcrSiS| mer_proKri.L:urf_utjb1c. user rg'iiihgg £onfig,h777 rerlzisinservice d弟二县#E "1vpr1 诵itiq AU 匸匹Q f l 弓(吕上 角FfcaTI 门厂i. d bpt, 1m 自nwprr.T xlng <1 詩启这个修改并不是必须的,没有这个系统也能正常工作,只是广播数据中少了 cust profile信息,为了避免表里不一,还是建议修改一下吧。刚才我们在 user_proxr.c添加了 user_app_o
21、n_connection、 user_app_on_disconnect、user_on_db_init_complete 和 user_catch_rest_hndl,我 们必须告诉系统我们要调用这些函数,而不是默认,所以我们需要修改-user_callback_c on fig.h 添加头文件:yi-HWVuwr callba<k-ccnfiq h_ u$er_prQxr,c7? f includesp fl t a r . ?.ri工5# in elude "app pr f t ypes , h"-3S £*fde± TkET CUST S
22、VC39 include Huser proxr . hr|rr40 #endif修改以下callback函数:£7 5tat±c const strict app 匚!s丄二 1ml匚址日 unu工 app calJ-backa (Hairier ijcbt_cu5T_5VG-app on ccnnectior -app_QH_di s Gome ct false-app_on_GQnn!= st i on,aippondl s go me cit-tendif= user app cn connectio口* =vsex app gp discoiwectr* a,pp
23、_cn_up dat e_p ar axs_r ei=t:tedPapp on update paTSTTL u已tcq!户tp* app_on_sevGornf iomplee* app_0D_aav_i:ai re G_copi ec e+ onHjreut UTiqjIecE=NULL,=NnLT.,= aeaul tapp_ai;_a ct_dev_con f 1 qcmp lu t 吕,=app_aaverL13£_compie-eH=bdlL一ICOTkBT_OJST_5VC10:LC;f心io4勺卜 init ccmpleteuae r_on_jdh_ini t_caw
24、(i>l ete,fel-sc«app_an_db_ini t_CQnp Let>e fendif dcfaalC app ns db dnix GomplieCzf修改以下定义:static void (*c onst app_process_catch_rest_cb)(ke_msgd_t const msgid, void const *param, ke_task_id_t const dest_id, ke_task_id_t const src_id) NULL为static void (*c onst app_process_catch_rest_cb)(k
25、e_msgd_t const msgid, void const *param, ke_task_id_t const dest_id, ke_task_id_t const src_id)= (catch_rest_eve nt_fun c_t)user_catch_rest_h nd|修改完毕后我们需要编辑user_custs_c on fig.h文件,这里代码有点多,我直接 贴出来:#ifndef _USER_CUSTS_CONFIG_H_#define _USER_CUSTS_CONFIG_H_#include <stdint.h>#include "prf_ty
26、pes.h"#include "attm_db_128.h"#include "app_prf_types.h"#include "app_customs.h"#define DEF_CUST_SVC_UUID_128 0x2F, 0x2A, 0x93, 0xA6, OxBD, 0xD8, 0x41,0x52, OxAC, OxOB, 0x10,0x99, 0x2E, 0xC6, 0xFE, 0xED#define DEF_CUST_WRITE_CHAR_UUID_1280x10, 0x11,0x12, 0x13, 0x14
27、, 0x15, 0x16, 0x17, 0x18,0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1 F:#define DEF_CUST_READ_CHAR_UUID_1280x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28,0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2 F:#define DEF_CUST_NOTIFY_CHAR_UUID_128 0x30, 0x31,0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38,0x39, 0x3A, 0
28、x3B, 0x3C, 0x3D, 0x3E, 0x3F#define DEF_CUST_CHAR_LEN20CUST CHAR USER DESC"Custom"III CUSTOM Service Data Base Characteristic enum enumCUST_IDX_SVC = 0,CUST_IDX_WRITE_CHAR,CUST_IDX_WRITE_CHAR_VAL,CUST_IDX_READ_CHAR,CUST_IDX_READ_CHAR_VAL,CUST_IDX_NOTIFY_CHAR,CUST_IDX_NOTIFY_CHAR_VAL,CUST_ID
29、X_NB,;static const uint8_t customs_att_max_sizeCUST_IDX_NB=CUST_IDX_SVC= 0,CUST_IDX_WRITE_CHAR=0,CUST_IDX_WRITE_CHAR_VAL=DEF_CUST_CHAR_LEN,CUST_IDX_READ_CHAR=0,CUST_IDX_READ_CHAR_VAL=DEF_CUST_CHAR_LEN,CUST IDX NOTIFY CHAR= 0,CUST_IDX_NOTIFY_CHAR_VAL = DEF_CUST_CHAR_LEN, ;=DEF_CUST_SVC_UUID_128;stati
30、c const att svc desc128 t custom svcstatic uint8_t CUST_WRITE_CHAR_UUID_128ATT_UUID_128_LENDEF_CUST_WRITE_CHAR_UUID_128;static uint8 t CUST READ CHAR UUID 128ATT UUID 128 LEN=DEF_CUST_READ_CHAR_UUID_128;static uint8 t CUST NOTIFY CHAR UUID 128ATT UUID 128 LEN=DEF_CUST_NOTIFY_CHAR_UUID_128;static con
31、st struct att char128 desc custom write char=ATT CHAR PROP W/R,0, 0,DEF_CUST_WRITE_CHAR_UUID_128;static const struct att char128 desc custom read char=ATT_CHAR_PROP_RD,0, 0,DEF_CUST_READ_CHAR_UUID_128;=ATT_CHAR_PROP_NTF |static const struct att_char128_desc custom_notify_charATT_CHAR_PROP_RD,0, 0DEF
32、_CUST_NOTIFY_CHAR_UUID_128;static const uint16_t att_decl_svc = ATT_DECL_PRIMARY_SERVICE;static const uint16_t att_decl_char = ATT_DECL_CHARACTERISTIC;static const uint16_t att_decl_cfg = ATT_DESC_C LI ENT_CHAR_CFG;static const uint16_t att_decl_user_desc = ATT_DESC_CHAR_USER_DESCRIPTION;static cons
33、t struct attm_desc_128 custs1_att_dbCUST_IDX_NB=/ CUSTOM Service DeclarationCUST_IDX_SVC= (uint8_t* )&att_decl_svc, ATT_UUID_16_LEN, PERM(RD,ENABLE),sizeof(custom_svc), sizeof(custom_svc),(uint8_t* )&custom_svc,(uint8_t* )&custom_write_char,ATT_UUID_16_LEN, PERM(RD, ENABLE),sizeof(custom
34、_read_char), sizeof(custom_read_char),(uint8_t*)&custom_read_char,/ Custom Read Characteristic ValueCUST IDX READ CHAR VAL= CUST READ CHAR UUID 128,ATT_UUID_128_LEN, PERM(RD, ENABLE),DEF_CUST_CHAR_LEN, 0, NULL,/ Custom Read Characteristic DeclarationCUST_IDX_NOTIFY_CHAR= (uint8_t* )&att_decl
35、_char,ATT_UUID_16_LEN, PERM(RD, ENABLE),sizeof(custom_notify_char), sizeof(custom_notify_char),(uint8_t* )&custom_notify_char,/ Custom Characteristic ValueCUST_IDX_NOTIFY_CHAR_VAL= CUST_NOTIFY_CHAR_UUID_128,ATT_UUID_128_LEN, PERM(RD, ENABLE) | PERM(NTF, ENABLE),DEF_CUST_CHAR_LEN, 0, NULL,;/* LOC
36、AL VARIABLES*/ Custom1/2 server function callback tablestatic const struct cust_prf_func_callbacks cust_prf_funcs=#if (BLE_CUSTOM1_SERVER) TASK_CUSTS1,custs1 att db,CUST_IDX_NB,#if (BLE_APP_PRESENT) app_custs1_create_db, app_custs1_enable, #elseNULL, NULL,#endifcusts1_init, NULL,#endif#if (BLE_CUSTO
37、M2_SERVER) TASK_CUSTS2,NULL,0,#if (BLE_APP_PRESENT) app_custs2_create_db, app_custs2_enable, #elseNULL, NULL,#endifcusts2_init, NULL,#endifTASK NONE, NULL, 0, NULL, NULL, NULL, NULL,/ DO NOT MOVE. Must always be last;/ USER_CONFIG#endif / _USER_CUSTS_CONFIG_H以上代码主要添加了 CUST_IDX_WRITE_CHAFCUST_IDX_REA
38、D_CHAR CUST_IDX_NOTIFY_CHARi性,如果需要增加其他属性如 In dication,则可以按 照它的样子添加即可:e ' / AricriDTaes max isngun u孚住 m wrx'ce/reaa cnaracrcensi:!" acrcionaSO stscic const u.iii-8 t customs att size CU5T IDX NBai El(828384858607asasoo9192 ;CUSTIDXSVCCUST_IDXWRITECEARCUSTI DXW RITECEAIVAl:CUST_I DX_EAD_
39、CHAR CUST IDX REkD CHAR VALCU5T_ZI F¥_CHAR CUST ZDX NOIIFY CHAR VUL-g-DEF_CUST_匚HAR_L£N,-0F=DEr CUST CHAR LEHf=Of=DEF COST CHAR LEWd-Z-ier 2F匚L2TA5LZ static*e_tutsx_is. _at"riaui;e_i Iar&c-1ss( *£sn_E.tir._3.H, aerc4define “P_X<WiM_trPBT_TNTy_JMIN £N * U弓血2匸«/ N
40、" la15c*ierar.e app-pwwi-upcFr-lateScya/ e刘尸 Eventa anppcistdef jlhc 島RF二删口口丫SCO/ H * lOutilerxl-=这j/ J9 * lom 连揍唐廷迟奏夾置jk_ T _. 片二二 _ic r F_F=R_r=DATT_Er?i3LZ ,二Fd TH r 严(:七戶¥ -芒TT 尸.;可以在上图中的CUST_IDX_NOTIFY_CHAR_VA面添加相关定义,这里就不展 开说明了。当然,不仅仅是上图的一个地方要添加,其他相关地方也需要。全部添加完毕后,编译并烧录到芯片运行,应该就能实现一开始所
41、描述的功、conn param update 代码添力卩由于本次测试需要将conn interval设置为最快7.5ms,所以,增加连接参数同 步代码比较重要,本次修改都在 user_proxr.c中进行:首先在头部添加以下代码:"toX<3 spp Earszi iipdata Znr; ivoii;Didrcrt :¥匚id) J J亠一 -L- J -L k_- =: - -IH. _1 I - ;其中红框中的部分为连接参数,此参数IOS会毫无疑问拒绝同步,如果你测试 的是ISO手机,则请修改为IOS支持的连接参数规则。然后在文件最后加上以下代码:235 Elt
42、ifdef APP PARAhCnPMTE E5TA3LE256 缈曰I29S233SDD3DL302303303353063Q73 DO3Q931031131231331fl31Tcid app parair zddte func (void)struct g已匚c: zarau_update_cmj * req = KEISG ALLOC (GAPC PiMM_UPDMT CMD,TA5?t_GAPC, TA5笛 AtP, gap c_pa r am updat e_c3Ltl i ; / Fill in the parcuieter stiuctuE'e 3re tj- >
43、 apex at io n GAPC UP DATE P5uRAl-LS ;req->paraTrs i ntv_min = AP F_FARAM_UP DT_ TNTV_MTM : req-yparaits , intvmax = AP FEARAMUP;req->paxaiL5 ,latency = AJF FARAH JPUT LATEXCT;re q->F a H且rt3 . t iir.eovt = AP P_EABAK_U'P DT_TIMEOnT ;ke JU57 serd (req);N * 1.25msN * 1,25msConn Events sk
44、ipped.N * ICmsvcid app_paranupdate_ata匸匸(void) 白app pamr, opiate fmu"ITQia app easy app paxarr updaue scoplv:id)316 Qi31731B319 -320 L|app_p*XMr._upd*r®_cimar_id-ELSY_TIM£R_INV7iLI&_TIMER; add param update start (l j最后在user_app_on_connection函数中添加timer启动函数,以便在每次连接 建立后APP PARAM UPDT
45、 TIMEOUT间内发起参数同步请求:J31133235wei!3 "ser_-app_fiF:_eefln*etaQB mi-fir s_- e±AE.*e-.i L zu匚匕口佔口丄期>_工日丄罷dElf23de fa ul t_aip_on_cc tme scl del dc qdedh_1cDc r paz ul) ?131J3«237 El2352S241込insei -tftSY.TIKERIWALIQTIKER)< " iPl_e3 3i_jj,ijei_Gancel nctiE jtliBer *:Mr=EAfl¥_
46、T rHl-THVjilDrKEP;nC".】f y 九】皿厂1 旺陰 Liar# 十a11:m_imt nFr LhnGftLtLLt:i 四上ir 耐uilHihL) ;日匚口 匚BkajL JE-iat-s tuu=r xd ajje_ sasj txjiez. lAJrh1JidJ* UlUkX# 且匚匚 -*., "匸匚 匚县工hl 上匚3二巴 Ate匚 二m匸丄到此,同步参数代码添加完成接下去我们来添加Notify发送代码,来测试Notify发送。我们在user_proxr.c中定义以下两个变量:ObDIjQHOlrfiM<Dje丄口 工:二.L j
47、l'. 11,DaJDlOaQlrOd!.DxlxdlxCl DxDlj, 口星口二.:?!二 1* 血m川工cihPMi. 血叫仙山皿 OXl.nflSSOlrGMCl, OMii,OsoirOMZirOKTillgMrarci)<D3Dlir0lfllrCKlQ'lpDim 丄 Tifl3LrOJ£C4rCi»)bOr31p.C?3l_lt DBTharzarPlCCl DXllrjEQlrDKQilp KJl.pCJK-llrOiir.lrDx?lll.Os<Qll,0x&lr 3EQ1, 口 疋0片口寡口122( BbaJblc
48、ULUcftjt dnt A_kMii!f 400 *C227O-xQLf 伽01. OkI.« QkO 1M 仙31 DmI上OkOI22 e0x02 , OkOI, D“1.aOsll,. 3Mjl,:xJl22dsdSir DjuOI,丄.OjiCil-X _290SO 缶恤M. Djc3】/ML Qxai.ChcOd.OmOI231QkI232口工口 Ef Datai, DKDiaxaia 2X21*3X31,CUtOl233oji.a?rC>KGi» OKOiaxai池曲側儿OkOI234aKOBfOKOl f DMDlf aM«il.rC>
49、MCl#3M31f倔丄?-3EaKagrC'KMfOMDiJ! axoirOMSneDKJl,OK<1123fdElOrOkOI,Ok,0x01r0s71rDH?l,0x31缈mtfOMi, owDi>ajniffOlKGl#0NOlf2s北QKlfrOHOl#DW0>l,VVOl辟1*(3M1za9axl3FDKlr DxDlaKOl3k7!1,伽可10si4r&k01,OkDI,0x010x01241 *15,DX? jQMD】r:it)lr V 1,-PMl蜩QXlDxOlf DXPI口:KOIp-PHZl, 1K11,HR1!23dxlrOKO1, 0
50、KD1,0X131r1, IX '1,J. s .1gnSKM. oitDiaMir 0:1, X?l>J4i0B19r OKdlr DxDlf aieCil,0x010x31,"XHMEC13E2CI r OkDI f - 1 * 口却1r GK_lr DK31,口 ?rc 1MV CmC二.AjcOICmC -n "Oln ChOLj. 0Jt91# gggg*x01 二血二 j.kQ1 aCx-j 二.血=二 i 二工二 _JXJ1 a a srOl, CwDl_xl_. JXJI, _Jc_LrLL_.鼻丄JarllL* :jc丄0m01.9x01,O
51、nQ 1 i. 0k01 CkaOlt W*ChrOS OaDldsiSl. 2*:1 C*CG ”0 Z-r C*0- MM川初g D再m OaDIM 奴 Lt 二X二二Xll.jCJtCLpx01-CK|lr 3二 OXDI, GmCIL*C-mCdt阳DItOK<llPflMCllj DiiDlt<1x0LrdaQlr 牯:icmu t moi f ma i P Choi p obi&i, a xair om<di# qsdi, q aa l r cm di Oku p axai r aioirCxoi.!,axDiF<naLr oci * oxd 1,0
52、101, asci CkCLb iKCfci.,0k01 rCk01,0>x01F0蠶0LrOsC-1,OJtOL,0«01r0x01 ah#i gg oiioif &mo gg ana if oiei # dud x# 勺盧01 * oson vwMiraifiiipKi: P0«10<1(|01,109|7: 宀-、, ix»>iirCK'jLFCKc 1 f oxoirOxaiv0x01 *oxdirQMi,oaoi 萌2屈切:r 0 -: :, 0>>01 p < bQ Lr 0x1« 0>
53、;01, 0 xO 1 r OsCii 0WD1 rDHDlv nflldiMn.i DBDljr OBO Lr OvDlf DSD 打 Q E L UDI mm T KW叶 01 理需 Q1, cm% REM 胡 rtn . ownC KCL-OTHOlrCxOlF CK01f DxOlrCJKair DK01, 0x01,01110x01 <M>11 iftSOl # tKOLji 49001.1 DUDI <Md Lf MOIL. DBD JL. QKILf 0X01 IMHL r RxDl r ttsfllf OartHm DBDlf Cl Lr Oafil f Ds
54、Dl# a3PdLrCBOl:-: H :.:,>!' ,:-: - f ::: ,K«- 1 f 7 £ : ; r IT "I : p, 7 W : 114Rmnti_T p_n.iTQidata_buff为发送数据,p_data为发送指针,我们的目的是将 data_buff400 这个数据包通过20个notify发送出去,每个notify的长度为20.我们在前面写的notify_charactertistic_update函数中添加以下发送代码:iw ZjraiE void “也塩ehiraeectt 13e.iivoidj251IT CF d
55、a-a<Z -i252:k 咖/ TTIdC-4I 5 :电L5K比 2二匚 set+ GOTT IEK WOT二IT GEM- 7aL>255Z-ET CTST Z5M. LJN, (UlUicE z )4|'(Laia Is亠t二口 daca*2DJ) :. J25£2S7/NZkiM mxII ««nd 石1» vb!m« xnait«XnavK6prf_3crwcEcvflnt | ipi:f_ci;v_5- F£厚丄事专 f25PeiLv.shil 斗 CUSTT IBM tioTIFY CHB r'ALFjl遜Sata+jJfilJ2SZe亡tizy_TiK.er -
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五年度科技园区研发场地租赁合同范本下载3篇
- 《框架结构荷载分析》课件
- 2024简单工程劳务合同范本
- 税务业务知识培训课件
- 世纪生物医药研发与转让合同(04版)
- 个人住宅抵押贷款法律协议(2024版)版
- 2024版人力资源服务合同
- 2024年03月陕西中国银行信息科技运营中心(西安)春季校园招考笔试历年参考题库附带答案详解
- 二零二五年度餐饮行业员工福利保障合同3篇
- 2025年度新型装配式彩钢房拆除与改造施工合同范本4篇
- 人教版小学数学(2024)一年级下册第一单元 认识平面图形综合素养测评 B卷(含答案)
- 企业年会摄影服务合同
- 电商运营管理制度
- 二零二五年度一手房购房协议书(共有产权房购房协议)3篇
- 2025年上半年上半年重庆三峡融资担保集团股份限公司招聘6人易考易错模拟试题(共500题)试卷后附参考答案
- 城市公共交通运营协议
- 内燃副司机晋升司机理论知识考试题及答案
- 2024北京东城初二(上)期末语文试卷及答案
- 2024设计院与职工劳动合同书样本
- 2024年贵州公务员考试申论试题(B卷)
- 电工高级工练习题库(附参考答案)
评论
0/150
提交评论