zStack学习笔记(原创,绝对不是抄的……)
我之前写的文章都没写上面那句,但是这篇写了,主要是因为zStack文章抄袭太严重……故此声明
因为涉及到数据的双向交互问题,所以在这里我考虑使用协议栈来实现数据的收发。
首先说下如何在Zstack中添加自己的任务。
首先要利用已有的SampleApp工程,在其中添加自己的任务。
添加任务流程如下:
1 首先定义任务函数,函数声明如下:
UINT16 FunctionName(byte task_id, UINT16 events);
2 定义好了函数后再定义一个用于指定任务ID的函数,很简单:
void Function_Init( byte task_id );
然后在OSAL_GenericApp.c文件的tasksArr数组中添加自己的任务函数地址。因为这个数组是一个函数指针数组。
然后在void osalInitTasks( void )函数中调用Function_Init函数,用于获取任务ID。不过我现在没发现这一步到底有什么用。
这样就实现了自己的任务函数的添加,等待消息相应即可。
在发送数据上,使用AF_DataRequest函数实现数据发送。这个函数的参数比较多,有点麻烦。
数据的接受上,在GenericApp_ProcessEvent回调函数中响应AF_INCOMING_MSG_CMD消息。这里zstack会默认调用一个函数,是GenericApp_MessageMSGCB。在这里处理根据afIncomingMSGPacket_t参数来进行数据的处理。
这个结构体的声明如下:
typedef struct
{
osal_event_hdr_t hdr;
uint16 groupId;
uint16 clusterId;
afAddrType_t srcAddr;
byte endPoint;
byte wasBroadcast;
byte LinkQuality;
byte SecurityUse;
uint32 timestamp;
afMSGCommandFormat_t cmd;
} afIncomingMSGPacket_t;
真正的数据其实是在成员变量cmd中,afMSGCommandFormat_t结构体的声明如下:
typedef struct
{
byte TransSeqNumber;
uint16 DataLength; // Number of bytes in TransData
byte *Data;
} afMSGCommandFormat_t;
就这样,可以通过这种方式获取你所想要的数据。
zStack的串口通信使用协议栈的函数来实现串口功能的开启和关闭。
另外就是zStack的波特率设置其实很有意思,有这么一串宏定义:
#define HAL_UART_BR_1200 0x00
#define HAL_UART_BR_2400 0x01
#define HAL_UART_BR_4800 0x02
#define HAL_UART_BR_9600 0x03
#define HAL_UART_BR_19200 0x04
#define HAL_UART_BR_31250 0x05
#define HAL_UART_BR_38400 0x06
#define HAL_UART_BR_57600 0x07
#define HAL_UART_BR_115200 0x08
我想说的就是,实在是太可爱了~
另外就是在波特率的具体设定上,还是参看代码比较好。
zStack学习笔记(原创,绝对不是抄的……)的更多相关文章
- MongoDB 学习笔记(原创)
MongoDB 学习笔记 mongodb 数据库 nosql 一.数据库的基本概念及操作 SQL术语/概念 MongoDB术语/概念 解释/说明 database database 数据库 table ...
- Z-Stack学习笔记
Technorati 标签: Z-Stack profile 1. 栈配置profile 栈参数的集合需要被配置为一定的值,连同这些值在一起被称之为栈配置.ZigBee联盟定义了这些由栈配置组成的栈参 ...
- NXP NFC移植及学习笔记(原创)
NFC功能介绍 NFC 目前使用的三种功能: 1. P2P模式:基于LLCP协议的基础上,以NDEF数据交换格式来通信. 2. 读写模式:当作为读卡器,对NFC Tag的读写. 3. 卡模拟模式:模块 ...
- Angular源代码学习笔记-原创
时间:2014年12月15日 14:15:10 /** * @license AngularJS v1.3.0-beta.15 * (c) 2010-2014 Google, Inc. http:// ...
- Python爬虫框架Scrapy学习笔记原创
字号 scrapy [TOC] 开始 scrapy安装 首先手动安装windows版本的Twisted https://www.lfd.uci.edu/~gohlke/pythonlibs/#twi ...
- [原创]java WEB学习笔记95:Hibernate 目录
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- [原创]java WEB学习笔记75:Struts2 学习之路-- 总结 和 目录
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- [原创]java WEB学习笔记66:Struts2 学习之路--Struts的CRUD操作( 查看 / 删除/ 添加) 使用 paramsPrepareParamsStack 重构代码 ,PrepareInterceptor拦截器,paramsPrepareParamsStack 拦截器栈
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- [原创]java WEB学习笔记52:国际化 fmt 标签,国际化的总结
本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...
随机推荐
- java小工具——timer
定时器Timer 用途:做定时器用的. public static void main(String[] args) { Timer timer = new Timer(); timer.schedu ...
- 一点关于"fat model, skinny controller"的思考
导言 想来从事服务器端开发也有将近一年的时间,服务端开发不能忽略的一个架构就是MVC架构,但一开始作为小白的我对这些高大上的概念也是很迷惑,由于很长一段时间应对的业务也是十分简单,业务代码也是流水一样 ...
- KDJ金叉测试
# -*- coding: utf-8 -*- import os import pandas as pd # ========== 遍历数据文件夹中所有股票文件的文件名,得到股票代码列表stock_ ...
- k8s的故障切换(failover)
当前3个节点的状态都为ready 当前node1有两个pod node2有1个pod 现在将node1关机会有怎样的现象 ping 分布在node1节点的pod地址已经ping不通. 在node1节 ...
- python 根据文件创建时间排序
#coding:utf8 import os,time directory = "d:/scrapy tutorial/" t = [] d = {} for filename i ...
- Problem B: 英雄无敌3(2)【模拟,日期转换】
Problem B: 英雄无敌3(2) Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 295 Solved: 52[Submit][Status][W ...
- 【线段树】Gym - 100507C - Zhenya moves from parents
线段树每个结点维护两个值,分别是这个区间的 负债 和 余钱. 按时间顺序从前往后看的时候,显然负债是单调不减的. 按时间顺序从后往前看的时候,显然余钱也是单调不减的,因为之前如果有余钱,可能会增加现在 ...
- 10.4(java学习笔记)CLOB,BLOB基本操作
一.CLOB 1.1CLOB简介 CLOB全称是(Character Large Object)字符大对象,用于存储大量的文本数据. 字符大对象的操作不同于一般数据,是通过流来完成的. 1.2MySQ ...
- 使用MultipleInputs和MultipleOutputs
还是计算矩阵的乘积,待计算的表达式如下: S=F*[B+mu(u+s+b+d)] 其中,矩阵B.u.s.d分别存放在名称对应的SequenceFile文件中. 1)我们想分别读取这些文件(放在不同的文 ...
- Java高级架构师(一)第02节:分模块、分工程管理
本节课程的目标在于:利用Maven构建分工程.分模块的空项目. -------- 基本的构建大致相同,有一个强调调点: 在总web的pom里边(architecture01web中),加入要合并的wa ...