【BLE-CC2640】CC2640之主机端获取notify数据

本篇博文最后修改时间:2017年06月02日,09:21。


一、简介

本文以SimpleBLECentral工程为例,介绍CC2640作为主机时是如何获取从机char4通道的notify数据


二、实验平台

协议栈版本:ble_cc26xx_2_01_00_44423

编译软件:IAR Embedded Workbench for ARM Version 7.40

硬件平台:两台CC26xxDK开发板

仿真器:XDS100V3(香瓜)


版权声明

博主:甜甜的大香瓜

声明:喝水不忘挖井人,转载请注明出处。

原文地址:http://blog.csdn.NET/feilusia

联系方式:897503845@qq.com

香瓜BLE之CC2541群:127442605

香瓜BLE之CC2640群:557278427

香瓜BLE之Android群:541462902

香瓜单片机之STM8/STM32群:164311667
香瓜单片机之Linux群:512598061
香瓜单片机之职场交流群:450154342
甜甜的大香瓜的小店(淘宝店):https://shop217632629.taobao.com/?spm=2013.1.1000126.d21.hd2o8i

四、 实验前提
1、在进行本文步骤前,请先 阅读 以下博文:
1)《CC2541之主机端获取notify数据》:http://blog.csdn.net/feilusia/article/details/50680035

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  
这里把char4的句柄写死了,实际上应该要通过获取的方式获得,香瓜此处偷懒。

2、修改UP按键部分代码(SimpleBLECentral.c的SimpleBLECentral_handleKeys函数中)
  if (keys & KEY_UP)
  {
    // Start or stop discovery
    if (state != BLE_STATE_CONNECTED)
    {
      if (!scanningStarted)
      {
        scanningStarted = TRUE;
        scanRes = 0;
        
        LCD_WRITE_STRING("Discovering...", LCD_PAGE2);
        LCD_WRITE_STRING("", LCD_PAGE3);
        LCD_WRITE_STRING("", LCD_PAGE4);
        
        GAPCentralRole_StartDiscovery(DEFAULT_DISCOVERY_MODE,
                                      DEFAULT_DISCOVERY_ACTIVE_SCAN,
                                      DEFAULT_DISCOVERY_WHITE_LIST);      
      }
      else
      {
        GAPCentralRole_CancelDiscovery();
      }
    }
    else if (state == BLE_STATE_CONNECTED &&
             charHdl != 0                 &&
             procedureInProgress == FALSE)
    {
	 	attWriteReq_t writeReq;
	    
	    writeReq.pValue = GATT_bm_alloc(connHandle, ATT_WRITE_REQ, 2, NULL);
	    if (writeReq.pValue != NULL)
	    {
	      writeReq.len = 2;
	      writeReq.pValue[0] = LO_UINT16(GATT_CLIENT_CFG_NOTIFY);
	      writeReq.pValue[1] = HI_UINT16(GATT_CLIENT_CFG_NOTIFY);
	      writeReq.sig = 0;
	      writeReq.cmd = 0;

	      writeReq.handle = GUA_CHAR4_CCC_Hdl;
	      
	      // Send the read request
	      if (GATT_WriteCharValue(connHandle, &writeReq,selfEntity) != SUCCESS)
	      {
	        GATT_bm_free((gattMsg_t *)&writeReq, ATT_WRITE_REQ);
	      }
	    }    
    /*
      uint8_t status;

	
      // Do a read or write as long as no other read or write is in progress
      if (doWrite)
      {
        // Do a write
        attWriteReq_t req;

        req.pValue = GATT_bm_alloc(connHandle, ATT_WRITE_REQ, 1, NULL);
        if ( req.pValue != NULL )
        {
          req.handle = charHdl;
          req.len = 1;
          req.pValue[0] = charVal;
          req.sig = 0;
          req.cmd = 0;

          status = GATT_WriteCharValue(connHandle, &req, selfEntity);
          if ( status != SUCCESS )
          {
            GATT_bm_free((gattMsg_t *)&req, ATT_WRITE_REQ);
          }
        }
        else
        {
          status = bleMemAllocError;
        }
      }
      else
      {
        // Do a read
        attReadReq_t req;
        
        req.handle = charHdl;
        status = GATT_ReadCharValue(connHandle, &req, selfEntity);
      }

      if (status == SUCCESS)
      {
        procedureInProgress = TRUE;
        doWrite = !doWrite;
      }
	  */
    }

    return;
  }

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};  
	      memcpy(str, pMsg->msg.handleValueNoti.pValue, pMsg->msg.handleValueNoti.len );  
	  }  
	}  
	//香瓜 
注:香瓜在这里直接用2541的处理代码,没有验证过,如果有编译错误,跟香瓜联系。

六、实验结果

在连接状态时,按UP键会打开char4的notify开关。在5S内会接收到来自从机的1个字节数据(0x03)。


注:香瓜这里直接使用2541的实验结果。如果结果有误,请跟香瓜联系。



  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值