选择从节点,数据通信部分代码

1 选择从节点,建立连接

 1 if ( !simpleBLEScanning && simpleBLEScanRes > 0)
 2          {
 3             simpleBLEScanIdx++;
 4             if ( simpleBLEScanIdx >= simpleBLEScanRes )
 5             {
 6                 simpleBLEScanIdx = 0;
 7             }
 8         uint8 addrType;
 9       uint8 *peerAddr;
10
11         if ( simpleBLEScanRes > 0 )
12         {
13            peerAddr = simpleBLEDevList[simpleBLEScanIdx].addr;
14            addrType = simpleBLEDevList[simpleBLEScanIdx].addrType;
15
16            simpleBLEState = BLE_STATE_CONNECTING;
17
18            GAPCentralRole_EstablishLink( DEFAULT_LINK_HIGH_DUTY_CYCLE,
19                                          DEFAULT_LINK_WHITE_LIST,
20                                          addrType, peerAddr );//发起连接建立请求
21 }

连接好以后调用simpleBLECentralEventCB——>GAP_DEVICE_DISCOVERY_EVENT

1 LCD_WRITE_STRING_VALUE( "Devices Found", simpleBLEScanRes,
2                                 10, HAL_LCD_LINE_1 );
3         if ( simpleBLEScanRes > 0 )
4         {
5           LCD_WRITE_STRING( "<- To Select", HAL_LCD_LINE_2 );
6
7         }

2 主节点向从节点通信

主节点向特征值6中写入要传输数据:

1 attWriteReq_t req;
2
3         req.handle = 0x0035; //特征值6的handle
4         req.len = 15; //value的长度为15,这要和从节点匹配好
5         req.value[0] = 0x00;
6         req.sig = 0;
7         req.cmd = 0;
8
9            GATT_WriteCharValue( simpleBLEConnHandle, &req, simpleBLETaskId ); 

从节点在simpleProfileChangeCB——>SIMPLEPROFILE_CHAR6中接收:

1 case SIMPLEPROFILE_CHAR6:      //特征值6
2       char newchar[15];
3       SimpleProfile_GetParameter( SIMPLEPROFILE_CHAR6, &newchar );
4
5       HalUARTWrite(0,&newchar[0],15);
6
7
8       break;

注意handle值设对,长度匹配在simpleGATTprofile.h中设好:

1 // Length of Characteristic 5 in bytes
2 #define SIMPLEPROFILE_CHAR5_LEN           5
3 #define SIMPLEPROFILE_CHAR6_LEN           15
4 #define SIMPLEPROFILE_CHAR7_LEN           15

3 从节点向主节点通信

从节点主动传输:

 1 static attHandleValueNoti_t pReport ;//声明attHandleValueNoti_t这个结构体
 2    uint16 noti_cHandle; //存放handle
 3
 4    pReport.handle = 0x2E; //特征值4的handle
 5    //pReport.handle = simpleProfileAttrTbl[11].handle;//读取notification对应的handle,不知道为什么不好使??
 6    GAPRole_GetParameter( 0x30E, &noti_cHandle);//获取Connection Handle
 7    pReport.len = 16;//数据长度
 8
 9    pReport.value[0] =0x01;//赋值
10    pReport.value[1] =0x02;
11    GATT_Notification(noti_cHandle,&pReport,FALSE);
12   

主节点在simpleBLECentralProcessGATTMsg中接收:

1  else if ( ( pMsg->method == ATT_HANDLE_VALUE_NOTI ) )   //通知
2   {
3     if( pMsg->msg.handleValueNoti.handle == 0x002E)   //CHAR4的通知  串口打印
4     {
5
6
7        HalUARTWrite(0,&pMsg->msg.handleValueNoti.value[0],16 );
8 }

网上说主节点需要先使能通知char4才能接收notification,但我现在的程序可以直接接收,不知道为什么??

时间: 2024-10-10 16:49:31

选择从节点,数据通信部分代码的相关文章

红黑树插入删除节点过程分析 &amp;&amp; C代码实现

红黑树的插入和删除规则: 红黑树的五个性质 1.    每个节点要么是红的,要么是黑的 2.    根节点时黑色的 3.    每个叶节点(叶节点既指树尾端NIL指针或NULL节点)是黑色的 4.    如果一个节点时红的,那么它的两个儿子都是黑色的 5.    对每个节点,其到叶节点树尾端NIL指针的每一条路径都包含相同数目的黑节点 这里所说的"叶节点"或者"NULL节点",它不包含数据而只充当树在此结束的知识. 二叉树的左旋和右旋这里不再讲解 红黑树的插入操作:

esayui combotree 只能选择子节点

esayui combotree 只能选择子节点用onBeforeSelect:参数是node,节点被选中之前触发,返回false取消选择动作. 网上找了好多都没一个可用的,要想知道他是子节点还是根节点,我们先来看看combotree的数据结构: data:[{ "id":1, "text":"My Documents", "children":[{ "id":11, "text":&q

easyui Tree模拟级联勾选cascadeCheck,节点选择,父节点自动选中,节点取消,父节点自动取消选择,节点选择,所有子节点全部选择,节点取消,所有子节点全部取消勾选

最近项目中用到easyui tree,发现tree控件的cascadeCheck有些坑,不像miniui 的tree控件,级联勾选符合业务需求,所以就自己重新改写了onCheck事件,符合业务需求.网上百度了很多资料,都没有完全符合自己业务场景的,所以就自己动手写咯. 先说一下自己的业务需求: 1.选中节点,上级以及所有直系上级节点自动选中,所有下级子孙节点全部自动选中: 2.取消选择节点,如果兄弟节点都未选择,则上级以及所有直系上级节点自动取消选择,所有下级子孙节点全部取消选中. 这里说一下c

guava 学习笔记 使用瓜娃(guava)的选择和预判断使代码变得简洁

1,本文翻译自 http://eclipsesource.com/blogs/2012/06/06/cleaner-code-with-guava-optionals-and-preconditions/,有说的不对的地方,欢迎斧正. 2,我开发软件的时候,朝着干净代码发展是我的特权,有一段时间,我曾在我几乎所有的项目中使用谷歌瓜娃(Google Guava),理由很简单,guava为我编写漂亮代码提供了很大的便利,今天,我想向你展示下我是怎么使用预判断来避免不必要的if/throw 申明,使用

看 nova-scheduler 如何选择计算节点 - 每天5分钟玩转 OpenStack(27)

本节重点介绍 nova-scheduler 的调度机制和实现方法:即解决如何选择在哪个计算节点上启动 instance 的问题. 创建 Instance 时,用户会提出资源需求,例如 CPU.内存.磁盘各需要多少. OpenStack 将这些需求定义在 flavor 中,用户只需要指定用哪个 flavor 就可以了. 可用的 flavor 在 System->Flavors 中管理. Flavor 主要定义了 VCPU,RAM,DISK 和 Metadata 这四类. nova-schedule

jquery 获取 outerHtml 包含当前节点本身的代码

在开发过程中,jQuery.html() 是获取当前节点下的html代码,并不包含当前节点本身的代码,然后我们有时候确需要,找遍jQuery api文档也没有任何方法可以拿到. 看到有的人通过parent().html(),如果当前元素没有兄弟元素还行,如果有那就行不通了.后来实验发现有一个jQuery的一个方法可以解决,而且非常简便,如下: jQuery.prop("outerHTML"); 复制代码代码如下: <div class="test">&l

EasyUI Combotree只选择叶子节点

EasyUI Combotree的方法拓展自Combo和Tree.而Tree有一个onBeforSelect事件来帮助我们实现只选择叶子节点的功能. Tree事件需要 'node' 参数,它包括下列属性: id:绑定到节点的标识值. text:要显示的文本. iconCls:用来显示图标的 css class. checked:节点是否被选中. state:节点状态,'open' 或 'closed'. attributes:绑定到节点的自定义属性. target:目标的 DOM 对象. onB

分类--决策树(J48选择根节点-信息熵)

1.J48原理 基于从上到下的策略,递归的分治策略,选择某个属性放置在根节点,为每个可能的属性值产生一个分支,将实例分成多个子集,每个子集对应一个根节点的分支,然后在每个分支上递归地重复这个过程.当所有实例有相同的分类时,停止. 问题:如何选择根节点属性,建立分支呢? 例如:weather.arff 我们希望得到的是纯分裂,即分裂为纯节点,希望找到一个属性,它的一个节点全是yes,一个节点全是no,或许第三个节点又全是yes,这是最好的情况,因为如果是混合节点则需要再次分裂. 通过量化来确定能产

Winform中Treeview控件失去焦点,将选择的节点设置为高亮显示 (2012-07-16 13:47:07)转载▼

Winform中Treeview控件失去焦点,将选择的节点设置为高亮显示 (2012-07-16 13:47:07)转载▼标签: winform treeview drawnode Treeview控件--Name:tVtypeList将tVtypeList的HideSelection属性设置为False,DrawMode属性设置为OwnerDrawText将tVtypeList的DrawNode事件写为:private void tVtypeList_DrawNode(object sende