1. 程式人生 > >【BLE】CC2541之主機端獲取notify資料

【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
2、在進行本文步驟前,請先實現以下博文:
暫無

五、基礎知識

暫無

六、實驗步驟

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資料。

因此,實驗成功。

相關推薦

BLECC2541主機獲取notify資料

本篇博文最後修改時間:2017年01月06日,11:06。 一、簡介 本文以SimpleBLECentral工程和SimpleBLEPeripheral工程為例,介紹CC2541作為主機時是如何獲取從機char4通道的notify資料。 二、實驗平臺 協議棧版

BLECC2541主機讀取特征值

roi repl void 定時 store val star content else if 本篇博文最後改動時間:2017年01月06日,11:06。

BLECC2541連線引數

轉載自: https://blog.csdn.net/feilusia/article/details/46909723 一、簡介 本文介紹CC2541的連線引數。 二、實驗平臺 協議棧版本:BLE-CC254x-1.4.0 編譯軟體:IAR 8.20.2 硬體平臺:S

BLECC2541電池電量服務

本篇博文最後修改時間:2017年01月06日,11:06。 一、簡介 本文以SimpleBLEPeripheral工程為例,介紹如何新增一個電池電量服務。 二、實驗平臺 協議棧版本:BLE-CC254x-1.4.0 編譯軟體: IAR 8.20.2 硬體平臺: Smar

BLECC2541通訊協議

本篇博文最後修改時間:2016年12月12日,10:51。 一、簡介 本文以SimpleBLEPeripheral工程為例,介紹如何在一個可讀、可寫、可通知、20位元組長的特徵值char6基礎上,新增一個香瓜自定義的通訊協議,並用app傳送指令實現P11口上的LE

BLECC2541新增特徵值

本篇博文最後修改時間:2017年03月21日,15:32。 一、簡介 本文以SimpleBLEPeripheral工程為例,介紹如何新增一個可讀、可寫、可通知、20位元組長的特徵值char6,並用app實現資料的收發。 二、實驗平臺 協議棧版本:BLE-CC254

BLECC254132.768kHZ外部晶振

本篇博文最後修改時間:2017年01月06日,11:06。 一、簡介 本文介紹外部的32.768K晶振對於CC2541的作用。 二、實驗平臺 協議棧版本:BLE-CC254x-1.4.0 編譯軟體:IAR 8.20.2 硬體平臺:Smart RF(主晶片CC2

BLECC2541解析協議棧的晶振初始化過程

本篇博文最後修改時間:2017年01月06日,11:06。 一、簡介 本文以SimpleBLEPeripheral為例,解析協議棧的晶振初始化過程。 二、實驗平臺 協議棧版本:BLE-CC254x-1.4.0 編譯軟體:IAR 8.20.2 硬體平臺:Smart

BLECC2541發現服務與特徵值

本篇博文最後修改時間:2017年01月06日,11:06。 一、簡介 本文以SimpleBLECentral工程為例,解析CC2541作為主機時是如何發現從機的服務和特徵值的。二、實驗平臺 協議棧版本:BLE-CC254x-1.4.0 編譯軟體:IAR 8.20.2

BLECC2541indicate

本篇博文最後修改時間:2017年08月31日,17:00。 一、簡介 本文以SimpleBLEPeripheral為例,講述如何通過按五項按鍵的“center”鍵傳送indicate資料給btool,用PC的串列埠工具打印出“indicate”的“發資料”和“應答”的過程

BLECC2541回撥函式

本篇博文最後修改時間:2017年01月06日,11:06。 一、簡介 本文以SimpleBLECentral工程中simpleBLECentralEventCB函式,來簡要說明回撥函式的定義和呼叫過程。 二、實驗平臺 協議棧版本:BLE-CC254x-1.4.0 編

BLECC2541開啟廣播過程

本篇博文最後修改時間:2016年11月11日,09:31。 一、簡介 本文介紹在應用層如何開啟廣播,且解析協議棧在此操作後做了什麼。 二、實驗平臺 協議棧版本:BLE-CC254x-1.4.0 編譯軟體:IAR 8.20.2 硬體平臺:Amart RF開發板(主晶

BLECC2541通過RSSI測距

本篇博文最後修改時間:2016年11月11日,09:21。 一、簡介 本文介紹如何在SimpleBLEPeripheral工程中,通過RSSI粗略測距。 二、實驗平臺 協議棧版本:BLE-CC254x-1.4.0 編譯軟體:IAR 8.20.2 硬體平臺:

BLECC2541獲取裝置的MAC地址實驗

安卓除錯工具掃描時直接顯示就是MAC地址。 蘋果裝置是以UUID的方式顯示。 所以我們直接用安卓裝置來測試。 我們連線時可以知道主機的地址。 變數是gapRole_ConnectedDevAddr,可以在peripherial.c裡搜尋GAP_LINK_

BLE-CC2541低功耗測試實驗-晶片驗證篇

實驗介紹 通過檢視晶片手冊cc2541的電氣特性表,cc2541低功耗(LowPower)有三種狀態:PowerMode1(簡稱:PM1)、PowerMode2(簡稱:PM2)、PowerMode3(簡稱:PM3)。 描述: PM1:

BLECC2541實時更新廣播包advertData內容

advertData[]是廣播包資料。 實時更新廣播包的API: extern bStatus_t GAP_UpdateAdvertisingData( uint8 taskID, uint8 ad

BLECC2541低功耗測試-系統執行篇

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、航天等工

NginxNginx多級代理,獲取客戶真實請求IP以及每級代理IP

Nginx多級代理,獲取客戶端真實請求IP以及每級代理IP 如圖所示,每一級nginx裡的location配置裡需要加上對應