手機(jī)動態(tài)修改設(shè)備名_第1頁
手機(jī)動態(tài)修改設(shè)備名_第2頁
手機(jī)動態(tài)修改設(shè)備名_第3頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、動態(tài)修改設(shè)備名12013-2016 infor link tech copy right:本歸訊聯(lián)電子所有。本客戶交流之用。如需,請注明出處。由于工程師水平有限,文檔難免有所疏漏和錯(cuò)誤,由此造成的損失,訊聯(lián)電子不承擔(dān)任何責(zé)任。商務(wù)合作請發(fā)郵件到 and。nRF51822 開發(fā)套件:http/mealDetail.htm?spm=2013.1.1000371.d9.rFJVAH&meal_id=114490501&item_num_id=37035490461&seller_id=1065873722013-2016 infor link tech copy right一拖多https燒錄器:/

2、item.htm?_u=4a58thc48a&id=446228218781. 前言本介紹了在APP 端動態(tài)修改藍(lán)牙設(shè)備名的方法。當(dāng)跟APP 連接上,APP基于修改藍(lán)牙設(shè)備的名稱以后,重啟藍(lán)牙設(shè)備,可以發(fā)現(xiàn)設(shè)備名稱已經(jīng)被修改。本SDK9.0 下的BLE_APP_UART 修改,請注意燒錄對應(yīng)版本的協(xié)議棧。2. 動手環(huán)節(jié)原理概述:32013-2016 infor link tech copy rightNORDIC 的有關(guān) BLE 的 DEMO 默認(rèn)都會包含 Generic Acs 服務(wù)和 Generic Attribute服務(wù),它們的UUID 分別是 0 x1800 和 0 x1801。有的

3、BLE app 可能顯示不了名字,只顯示這兩個(gè)服務(wù)的 UUID。即一個(gè)工程中即使沒有定義任何服務(wù),燒寫到板子上后,看到這兩個(gè)服務(wù)。連接上也能動態(tài)修改設(shè)備名就是利用了第一個(gè)服務(wù) Generic Acs。該服務(wù)為通用屬性規(guī)范服務(wù),為設(shè)備提供了一種確定信息的方式,包括設(shè)備名,外觀特性,最開始的連接參數(shù)等。使用其中的設(shè)備名屬性,來實(shí)現(xiàn)設(shè)備名的動態(tài)修改。連接上設(shè)備后這個(gè)服務(wù)下的設(shè)備名屬性,然后通過這個(gè)屬性寫新的名字,設(shè)備這邊判斷發(fā)送過來的操作是不是對 GenericAcs 服務(wù)下的設(shè)備名屬性的寫操作。如果是就保存名字到 flash 中,并且更新設(shè)備名。這樣當(dāng)設(shè)備重啟或者斷開連接后這邊再掃描就能看到新的設(shè)

4、備名字了。當(dāng)然你也可以專門建立一個(gè)服務(wù)然后添加一個(gè)特征值用于修改設(shè)備名。接收發(fā)送過來的新名字然后修改。不過SDK 里面 Generic Ac服務(wù),省事一點(diǎn)。s 服務(wù)中已經(jīng)有了設(shè)備名屬性,這里就直接用,不再去專門創(chuàng)建實(shí)現(xiàn)方法:因?yàn)楸纠躺婕暗?flash 的請參面的)。,所以先添加 flash 相關(guān)的處理(關(guān)于flash的操作/添加 sys_evt 事件處理sic void sys_evt_dispatch(u32_t sys_evt)pstorage_sys_event_handler(sys_evt);/協(xié)議棧初始化中上面的派發(fā)函數(shù)sic void ble_stack_init(void)u

5、32_t err_code;/ Initialize SoftDevice. SOFTDEVICE_HANDLER_INIT(NRF_CLOCK_LFCLKSRC_XTAL_20_PPM, NULL);/ Subscribe for BLE events.err_code = softdevice_ble_evt_handler_set(ble_evt_dispatch); APP_ERROR_CHECK(err_code);/sys_evt 事件處理函數(shù) ,flash 需要用到err_code = softdevice_sys_evt_handler_set(sys_evt_dispatch

6、);APP_ERROR_CHECK(err_code);42013-2016 infor link tech copy right初始化 flash,并且定義flash 操作完成后的回調(diào)函數(shù),在 main.c 文件的最上面添加如下代碼:/第一個(gè)字節(jié)存放的是標(biāo)識符表示 flash 中的數(shù)據(jù)是否是有效的 name/device_name0=0 xAA 表示是有效 name,device_name1表示 name 的長度#define NAME_SIZE 32u8_t device_nameNAME_SIZE;pstorage_handle_t my_name_addr; /name 存放的 fla

7、sh 地址/flash 操作完成后的回調(diào)函數(shù)。并沒有做什么有用的事,但是調(diào)函數(shù)所以這里需要定義flash 塊的時(shí)候需要有回sic void my_cb(pstorage_handle_t* handle, 8_t32_t 8_t32_tu u uuop_code, result,* p_data,data_len)switch(op_code)case PSTORAGE_UPDATE_OP_CODE:if (result = NRF_SUCS)prf(update end);break;/定義 flash 初始化函數(shù)void my_flash_init(void)u32_t err_code;

8、pstorage_module_param_t param;/申請一個(gè)塊 用來存放 name param.block_count = 1; param.block_size = NAME_SIZE; param.cb = my_cb;err_code = pstorage_init();prf(init err_code:%drn,err_code);err_code = pstorage_register(¶m, &my_name_addr);prf(registererr_code:%drn,err_code); /加載 flash 內(nèi)容。后面會判斷 name 是否有效,如果有效就

9、會用改 name /否則使用默認(rèn) nameerr_code = pstorage_load(device_name, &my_name_addr, NAME_SIZE, 0);prf(load err_code:%drn,err_code);52013-2016 infor link tech copy right然后將該 flash 初始化函數(shù)放到 main 函數(shù)中main(void)u32_t err_code;bool erase_bonds;u8_tstart_string = START_STRING;/ Initialize.APP_TIMER_INIT(APP_TIMER_PRE

10、SCALER, APP_TIMER_MAX_TIMERS, APP_TIMER_OP_QUEUE_SIZE, false);uart_init();/添加 flash 初始化,因?yàn)橛玫搅舜蛴⌒枰诺?uart_init 函數(shù)之后/因?yàn)?gap_params_init 函數(shù)中會判斷使用 flash 中的名字還是默認(rèn)名字/所以需要放到該函數(shù)之前 my_flash_init();buttons_leds_init(&erase_bonds);ble_stack_init(); gap_params_init();servi_init(); advertising_init();conn_params

11、_init();prf(%srn,start_string);err_code = ble_advertising_start(BLE_ADV_MODE_FAST); APP_ERROR_CHECK(err_code);/ Enter main loop. for (;)er_manage();然后修改 main 函數(shù)中調(diào)用的 gap_params_init 函數(shù)。該函數(shù)中判斷數(shù)中加載的 flash 內(nèi)容是否是有效 name,是就使用不是就用默認(rèn) name.my_flash_init函sic void gap_params_init(void)u32_t err_code; ble_gap_c

12、onn_params_tgap_conn_params; ble_gap_conn_sec_mode_t sec_mode;BLE_GAP_CONN_SEC_MODE_SET_OPEN(&sec_mode);/flash 數(shù)據(jù)有效則使用 flash 中的名字62013-2016 infor link tech copy rightif ( device_name0 = 0 xaa ) /有效 使用新名字/device_name1為名字長度prf(update namern);err_code = sd_ble_gap_device_name_set(&sec_mode,(const u8_t

13、*) device_name+2,device_name1);elseprf(default namern);err_code = sd_ble_gap_device_name_set(&sec_mode,(const u8_t *) DEVICE_NAME,strlen(DEVICE_NAME);APP_ERROR_CHECK(err_code);memset(&gap_conn_params, 0, sizeof(gap_conn_params);gap_conn_params.min_conn_ gap_conn_params.max_conn_erval = MIN_CONN_erva

14、l = MAX_CONN_ERVAL;ERVAL;關(guān)于 flash 中的內(nèi)容添加完了,然后是處理處理函數(shù):發(fā)送過來的新名字。定義事件sic void name_change(ble_evt_t * p_ble_evt)ble_gatts_evt_write_t * p_evt_write = &p_ble_evt-evt.gatts_evt.params.write;/通過 UUID 來判斷事件是不是寫 Generic Acs 服務(wù)中的名字屬性 if(p_evt_write-context.char_uuid.uuid =BLE_UUID_GAP_CHARACTERISTIC_DEVICE_N

15、AME) & (p_ble_evt-header.evt_id = BLE_GATTS_EVT_WRITE)prf(name change rn);device_name0 = 0 xaa; device_name1 = p_evt_write-len;memcpy(device_name+2, p_evt_write-data, p_evt_write-len); pstorage_update(&my_name_addr, device_name, NAME_SIZE, 0 );72013-2016 infor link tech copy right然后再將這個(gè)事件處理函數(shù)加到事件派發(fā)函

16、數(shù) ble_evt_dispatch 中。 ic void ble_evt_dispatch(ble_evt_t * p_ble_evt)sname_change(p_ble_evt);ble_conn_params_on_ble_evt(p_ble_evt); ble_nus_on_ble_evt(&m_nus, p_ble_evt); on_ble_evt(p_ble_evt); ble_advertising_on_ble_evt(p_ble_evt);bsp_btn_ble_on_ble_evt(p_ble_evt);到這里基本實(shí)現(xiàn)了修改設(shè)備名。不過連接上修改名字后斷開然后點(diǎn)擊掃描發(fā)現(xiàn)

17、名字并未更新,需要復(fù)位一下硬件設(shè)備才能看到設(shè)備名字變了。修改事件派發(fā)函數(shù) ble_evt_dispatch/因?yàn)樵摵瘮?shù)是在下面定義的,這里使用到,所以要 void advertising_init(void);一下sic void ble_evt_dispatch(ble_evt_t * p_ble_evt)name_change(p_ble_evt);/添加代碼,在斷開連接事件后初始化廣播數(shù)據(jù)if ( p_ble_evt-header.evt_id = BLE_GAP_EVT_DISCONNECTED ) advertising_init();ble_conn_params_on_ble_evt(p_ble_evt); ble_nus_on_ble_evt(&m_nus, p_ble_evt); on_ble_evt(p_ble_ev

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論