【BLE】CC2541之主機端獲取notify資料
本篇博文最後修改時間:2017年01月06日,11:06。
一、簡介
本文以SimpleBLECentral工程和SimpleBLEPeripheral工程為例,介紹CC2541作為主機時是如何獲取從機char4通道的notify資料。
二、實驗平臺
協議棧版本:BLE-CC254x-1.4.0
編譯軟體:IAR 8.20.2
硬體平臺:Smart RF開發板(主晶片CC2541)*2
三、
博主:甜甜的大香瓜
宣告:喝水不忘挖井人,轉載請註明出處。
原文地址:http://blog.csdn.NET/feilusia
聯絡方式:[email protected]
香瓜BLE之CC2541群:127442605
香瓜BLE之CC2640群:557278427
香瓜BLE之Android群:541462902
香瓜微控制器之STM8/STM32群:164311667甜甜的大香瓜的小店(淘寶店):https://shop217632629.taobao.com/?spm=2013.1.1000126.d21.hd2o8i 四、實驗前提 1、在進行本文步驟前,請先閱讀以下博文: 1)《CC2541之notify通知》:http://blog.csdn.net/feilusia/article/details/47020073 2)《CC2541之indicate指示》:http://blog.csdn.net/feilusia/article/details/48917625
暫無
五、基礎知識
暫無
六、實驗步驟
1、新增巨集定義(SimpleBLECentral.c中)
//GUA #define GATT_CLIENT_CFG_NOTIFY 0x0001 //開啟notify開關的數值 #define GATT_CLIENT_CFG_INDICATE 0x0002 //開啟indicate開關的數值 #define GUA_CHAR4_Hdl 0x2E //char4的控制代碼 #define GUA_CHAR4_CCC_Hdl 0x2F //char4的CCC的控制代碼 //GUA
2、修改UP按鍵部分程式碼(SimpleBLECentral.c的simpleBLECentral_HandleKeys函式中)
if ( keys & HAL_KEY_UP )
{
// Start or stop discovery
if ( simpleBLEState != BLE_STATE_CONNECTED )
{
if ( !simpleBLEScanning )
{
simpleBLEScanning = TRUE;
simpleBLEScanRes = 0;
LCD_WRITE_STRING( "Discovering...", HAL_LCD_LINE_1 );
LCD_WRITE_STRING( "", HAL_LCD_LINE_2 );
GAPCentralRole_StartDiscovery( DEFAULT_DISCOVERY_MODE,
DEFAULT_DISCOVERY_ACTIVE_SCAN,
DEFAULT_DISCOVERY_WHITE_LIST );
}
else
{
GAPCentralRole_CancelDiscovery();
}
}
else if ( simpleBLEState == BLE_STATE_CONNECTED &&
simpleBLECharHdl != 0 &&
simpleBLEProcedureInProgress == FALSE )
{
//香瓜
//開啟notify的CCC
attWriteReq_t req;
req.handle = GUA_CHAR4_CCC_Hdl; //char4的CCC的特徵值控制代碼,這裡寫死0x2F,可通過btool獲取到
req.len = 2;
req.value[0] = LO_UINT16(GATT_CLIENT_CFG_NOTIFY); //0x0001為開notify
req.value[1] = HI_UINT16(GATT_CLIENT_CFG_NOTIFY);
req.sig = 0;
req.cmd = 0;
GATT_WriteCharValue( 0, &req, simpleBLETaskId );
/*
uint8 status;
// Do a read or write as long as no other read or write is in progress
if ( simpleBLEDoWrite )
{
// Do a write
attWriteReq_t req;
req.handle = simpleBLECharHdl;
req.len = 1;
req.value[0] = simpleBLECharVal;
req.sig = 0;
req.cmd = 0;
status = GATT_WriteCharValue( simpleBLEConnHandle, &req, simpleBLETaskId );
}
else
{
// Do a read
attReadReq_t req;
req.handle = simpleBLECharHdl;
status = GATT_ReadCharValue( simpleBLEConnHandle, &req, simpleBLETaskId );
}
if ( status == SUCCESS )
{
simpleBLEProcedureInProgress = TRUE;
simpleBLEDoWrite = !simpleBLEDoWrite;
}*/
//香瓜
}
}
用“//香瓜”包含起來的部分為主要修改部分。也就是在連線時,按UP鍵能開啟char4的notify開關。
3、新增接收通知資料的處理部分程式碼(SimpleBLECentral.c的simpleBLECentralProcessGATTMsg函式末尾)
//香瓜
else if ( ( pMsg->method == ATT_HANDLE_VALUE_NOTI ) ) //通知
{
if( pMsg->msg.handleValueNoti.handle == GUA_CHAR4_Hdl) //CHAR6的通知 串列埠列印
{
char str[32] = {0};
osal_memcpy(str, pMsg->msg.handleValueNoti.value, pMsg->msg.handleValueNoti.len );
}
}
//香瓜
七、注意事項
暫無
八、實驗結果
在連線狀態時,按UP鍵會開啟char4的notify開關。在5S內會接收到來自從機的1個位元組資料(0x03)。
設定斷點在如下圖的地方,可以在程式碼中檢視到結果:
主機成功地讀取到了從機的notify資料。
因此,實驗成功。
相關推薦
【BLE】CC2541之主機端獲取notify資料
本篇博文最後修改時間:2017年01月06日,11:06。 一、簡介 本文以SimpleBLECentral工程和SimpleBLEPeripheral工程為例,介紹CC2541作為主機時是如何獲取從機char4通道的notify資料。 二、實驗平臺 協議棧版
【BLE】CC2541之主機端讀取特征值
roi repl void 定時 store val star content else if 本篇博文最後改動時間:2017年01月06日,11:06。
【BLE】CC2541之連線引數
轉載自: https://blog.csdn.net/feilusia/article/details/46909723 一、簡介 本文介紹CC2541的連線引數。 二、實驗平臺 協議棧版本:BLE-CC254x-1.4.0 編譯軟體:IAR 8.20.2 硬體平臺:S
【BLE】CC2541之電池電量服務
本篇博文最後修改時間:2017年01月06日,11:06。 一、簡介 本文以SimpleBLEPeripheral工程為例,介紹如何新增一個電池電量服務。 二、實驗平臺 協議棧版本:BLE-CC254x-1.4.0 編譯軟體: IAR 8.20.2 硬體平臺: Smar
【BLE】CC2541之通訊協議
本篇博文最後修改時間:2016年12月12日,10:51。 一、簡介 本文以SimpleBLEPeripheral工程為例,介紹如何在一個可讀、可寫、可通知、20位元組長的特徵值char6基礎上,新增一個香瓜自定義的通訊協議,並用app傳送指令實現P11口上的LE
【BLE】CC2541之新增特徵值
本篇博文最後修改時間:2017年03月21日,15:32。 一、簡介 本文以SimpleBLEPeripheral工程為例,介紹如何新增一個可讀、可寫、可通知、20位元組長的特徵值char6,並用app實現資料的收發。 二、實驗平臺 協議棧版本:BLE-CC254
【BLE】CC2541之32.768kHZ外部晶振
本篇博文最後修改時間:2017年01月06日,11:06。 一、簡介 本文介紹外部的32.768K晶振對於CC2541的作用。 二、實驗平臺 協議棧版本:BLE-CC254x-1.4.0 編譯軟體:IAR 8.20.2 硬體平臺:Smart RF(主晶片CC2
【BLE】CC2541之解析協議棧的晶振初始化過程
本篇博文最後修改時間:2017年01月06日,11:06。 一、簡介 本文以SimpleBLEPeripheral為例,解析協議棧的晶振初始化過程。 二、實驗平臺 協議棧版本:BLE-CC254x-1.4.0 編譯軟體:IAR 8.20.2 硬體平臺:Smart
【BLE】CC2541之發現服務與特徵值
本篇博文最後修改時間:2017年01月06日,11:06。 一、簡介 本文以SimpleBLECentral工程為例,解析CC2541作為主機時是如何發現從機的服務和特徵值的。二、實驗平臺 協議棧版本:BLE-CC254x-1.4.0 編譯軟體:IAR 8.20.2
【BLE】CC2541之indicate
本篇博文最後修改時間:2017年08月31日,17:00。 一、簡介 本文以SimpleBLEPeripheral為例,講述如何通過按五項按鍵的“center”鍵傳送indicate資料給btool,用PC的串列埠工具打印出“indicate”的“發資料”和“應答”的過程
【BLE】CC2541之回撥函式
本篇博文最後修改時間:2017年01月06日,11:06。 一、簡介 本文以SimpleBLECentral工程中simpleBLECentralEventCB函式,來簡要說明回撥函式的定義和呼叫過程。 二、實驗平臺 協議棧版本:BLE-CC254x-1.4.0 編
【BLE】CC2541之開啟廣播過程
本篇博文最後修改時間:2016年11月11日,09:31。 一、簡介 本文介紹在應用層如何開啟廣播,且解析協議棧在此操作後做了什麼。 二、實驗平臺 協議棧版本:BLE-CC254x-1.4.0 編譯軟體:IAR 8.20.2 硬體平臺:Amart RF開發板(主晶
【BLE】CC2541之通過RSSI測距
本篇博文最後修改時間:2016年11月11日,09:21。 一、簡介 本文介紹如何在SimpleBLEPeripheral工程中,通過RSSI粗略測距。 二、實驗平臺 協議棧版本:BLE-CC254x-1.4.0 編譯軟體:IAR 8.20.2 硬體平臺:
【BLE】CC2541獲取裝置的MAC地址實驗
安卓除錯工具掃描時直接顯示就是MAC地址。 蘋果裝置是以UUID的方式顯示。 所以我們直接用安卓裝置來測試。 我們連線時可以知道主機的地址。 變數是gapRole_ConnectedDevAddr,可以在peripherial.c裡搜尋GAP_LINK_
【BLE】-CC2541低功耗測試實驗-晶片驗證篇
實驗介紹 通過檢視晶片手冊cc2541的電氣特性表,cc2541低功耗(LowPower)有三種狀態:PowerMode1(簡稱:PM1)、PowerMode2(簡稱:PM2)、PowerMode3(簡稱:PM3)。 描述: PM1:
【BLE】CC2541實時更新廣播包advertData內容
advertData[]是廣播包資料。 實時更新廣播包的API: extern bStatus_t GAP_UpdateAdvertisingData( uint8 taskID, uint8 ad
【BLE】CC2541低功耗測試-系統執行篇
1.osal_pwrmgr_powerconserve 描述: osal_pwrmgr_powerconserve()函式低功耗具體的處理函式,可以發現要想支援此功能,必須首先包含POWER_SAVI
【python】代理反ip限制獲取URL資料
#-*- coding:utf-8 -*- import datetime import queue import threading import time from random import choice import requests import urllib3 urlli
【 專欄 】- CentOS雲服務端之Python爬蟲及資料庫知識
作者:楊秀璋 學歷:本科-北京理工大學 碩士-北京理工大學 現任教於貴財財經大學資訊學院 http://www.eastmountyxz.com 簡介:自幼受貴州大山的薰陶,養成了誠實質樸的性格。經過寒窗苦讀,考入BIT,為完成自己的教師夢,放棄IT、航天等工
【Nginx】Nginx多級代理,獲取客戶端真實請求IP以及每級代理IP
Nginx多級代理,獲取客戶端真實請求IP以及每級代理IP 如圖所示,每一級nginx裡的location配置裡需要加上對應