EDN首页   博客首页 用户登陆  |  注册
aaa
发表于 2009/3/20 13:48:28

0

关于投票

开发JN ZigBee应用程序的各种API(包括函数和变量、常量等)

●●片上外设API

函数:

除中断处理函数

void vHwDeviceIntCallback (

uint32 u32DeviceId,

uint32 u32ItemBitmap);

之外,其他所有的函数命名方式为:

返回类型+AHI_+设备+功能

变量、常量:

中断有关的枚举类型:u32DeviceId、u32ItemBitmap

---------------------------------------------------------------

●●BOS API

函数:

命名方式为:

返回类型+Bos+功能

变量、常量:

---------------------------------------------------------------

●●ZDP API

有三类函数:

设备发现、服务发现、绑定

命名方式为:

zdp+功能

返回数据类型如何确定??

常量、变量:

ZDP STATUS

ZDP Cluster ID

---------------------------------------------------------------

●●AF API

有两类函数:

AF数据实体函数(AFDE)、AF管理实体函数(AFME)

AF数据实体函数(AFDE)

命名方式为:

afde+功能

仅一个函数:afdeDataRequest

AF数据管理函数(AFME)

命名方式为:

afme+功能

变量、常量:(在文件af.h中)

(AFME):KVP、MSG

AF_Transaction_s 、AF_Msg_Transaction_s 、AF_Kvp_Transaction_s 等

(AFME):Node、Power、Simple;Complex、User

AF_NodeDescriptor_s、AF_PowerDescriptor_s、AF_SimpleDescriptor_s;

AF_ComplexDescriptor_s、AF_UserDescriptor_s、

---------------------------------------------------------------

●●ZigBee应用API

有三类函数:应用初始化函数、应用到协议栈函数、协议栈到应用

应用初始化函数:冷启动、热启动函数

命名:AppColdStart 、AppWarmStart

应用到协议栈函数:多以JZS_开头

命名方式为:

JZS_+返回类型+功能

几个例外:vAppSaveContexts 、u16AppGetContextSize 、vAppGetContexts 、eAppSetContexts 

 

协议栈到应用函数:都以以JZA开头

命名方式为

JZA_+返回类型+功能

变量、常量:

tuJZS_StackEvent 

tsJZS_Config的协议栈变量:JZS_sConfig;

协议栈事件枚举变量:JZS_EVENT_xxxx

系统分类: 通信网络  |  用户分类: ZigBee  |  标签: Jennic API 分类  |  来源: 原创  | 

点击查看原文

发表评论 阅读全文(706) | 回复(0)

发表于 2009/3/19 20:10:51

0

关于投票

一般的jennic zigbee应用程序

1.初始化函数

首先调用的函数用来初始化和启动系统,当设备上电时,程序从AppColdStart开始,这里系统完成初始化。用户程序可能调用其他的初始化函数,比如初始化用户变量和系统片上外设比如定时器、UART等。另外,必要的zigbee系统参数,比如无线信道必须在这里配置。最后,BOS已经初始化和启动,调用启动BOS的函数不会返回,BOS开始控制系统。

BOS在调用函数JZA_vAppDefineTasks之前开始执行一些内部函数。JZA_vAppDefineTasks是用户程序可以在BOS中注册的函数(除了默认的用户任务),尽管如此在大多数情况下BOS用户任务不是必须的。然后由BOS控制系统。

执行完一些内部函数,BOS将控制权交给用户程序中最后的初始化函数:JZA_boAppStart,在这个函数中,可以为节点端点放置调用AF为端点注册任何ZIGBEE描述符,一旦这个步骤完成,必须在函数退出和返回控制权给BOS之前调用函数启动zigbee协议栈的函数。

 

主要的 Application 函数

一旦BOS和Zigbee协议栈启动,BOS将控制权通过一些函数交给用户程序,其中一个函数就由BOS调用,其他的函数是由事件驱动的,只有在相关的事件发生时才会被调用。当用户代码结束的时候,控制权又返回给BOS。BOS将周期性传递控制权给zigbee协议栈以完成必要的动作。

用户应用程序必须是非自锁的,它必须不能等待一个不停判决的条件,或者执行等待条件发生的空循环,因为周期性地将控制权交给BOS和zigbee协议栈以便正常工作是非常重要的。

主要的应用函数如下:

JZA_vAppEventHandler

由BOS在一定的时间间隔调用,任何需要周期性运行的用户应用程序可以放在其中。

 

JZA_vStackEvent

处理从下层协议栈来的各种事件,比如APS层的数据传输确认。

 

JZA_vPeripheralEvent

当硬件中断发生时被调用,比如Timer 或者DIO 线上的中断。从中断的上下文调用,可以将处理中断的应用函数代码置于其中。

 

JZA_bAfKvpObject

当KVP命令帧从其他设备接收时调用,可以将处理输入的命令和产生响应的用户程序放在该函数中。

 

JZA_bAfMsgObject

当MSG帧从其他设备接收时调用,可以将处理输入消息的应用程序放入该函数中。

 

JZA_vAfKvpResponse

当有输入的KVP 响应帧从其他节点接收时调用,可能是一个更早的命令帧的确认,或者请求数据的响应。可以将接收和处理响应帧的用户程序置于该函数中。

 

JZA_vZdpResponse

当一个响应从ZDP接收时调用该函数,比如一个绑定请求的响应,可以将处理相关响应的用户程序置于该函数中。

 

为了产生调用zigbee协议栈,发送KVP或MSG命令帧到其他的节点,或产生ZDP服务的请求(比如绑定),必要的函数调用必须在用户程序中包含。

 

系统分类: 通信网络  |  用户分类: ZigBee  |  标签: ZigBee 应用 初始化 主要函数  |  来源: 整理  | 

点击查看原文

发表评论 阅读全文(627) | 回复(0)

发表于 2009/3/19 14:51:23

2

关于投票

Jennic ZigBee 协议栈BOS下的任务创建

使用Jennic的协议栈需要使用BOS系统,该系统基于一种简单调度调度机制,可以在该系统内创建两个用户任务,一个是BOS默认创建的任务,而用户的应用只可以创建一个任务。任务是不可剥夺性的,由BOS系统时间驱动。

 

 

下面是两个关于任务创建的函数:

bool_t bBosCreateTask (const void (*pfvInit)(uint8), const void (*pfvHandler)(void *, uint8, uint8)); 

这个函数是用来在BOS中注册用户任务,参数是两个函数的指针,一个是初始化任务函数的指针,另一个是处理从任务接收到消息和事件的函数的指针。

在BOS中用户任务限制在两个,包括由bBosRun()创建的默认用户任务JZA_AppEventHandler(),该函数只可以用来创建第二个用户任务,如果需要,bBosCreateTask函数由下面的函数调用:

PUBLIC void JZA_vAppDefineTasks(void); 

这个函数用来在BOS中注册用户任务,在应用第一次运行之前由BOS调用一次

 

 

下面是一个示例:

void vAppTask1Init(uint8 u8Handler) 

   gu8AppHandle = u8Handler; 

   bBosSetEvent(gu8AppHandle, EV_START_DEVICE); 

void vAppTask1Handler(void* vTempTaskMsg, uint8 u8TempTaskMsgLen, uint8 u8Event) 

   if(u8Event & EV_START_DEVICE) 

   { 

      vAppSystemInit(); 

      JZS_vStartStack(); 

   } 

 

bool_t JZA_vAppDefineTask(void) 

   if (!bBosCreateTask(vAppTask1Init, vAppTask1Handler)) 

   { 

       vBosPanic(1); 

   } 

   return TRUE; 

系统分类: 通信网络  |  用户分类: ZigBee  |  标签: BOS 任务创建 ZigBee  |  来源: 原创  | 

点击查看原文

发表评论 阅读全文(764) | 回复(0)

发表于 2008/12/10 22:50:09

1

关于投票

JENNIC与TI的zigbee市场策略的不同

JN5139-Z01-M00的内部集成了ZIGBEE协议,该协议是JENNIC公司开发的协议,正是因为有协议在内部,所以其价格也就比一般的IC要贵,如果内部不集成ZIGBEE协议 (JN5139-Z00-M00则集成了IEEE.802.15.4 协议),估计价格要低很多。但是JN5139内部的ROM应该是一次性的编程ROM,JENNIC在其手册上也没有说明过其内部ROM的更多详细细节,用户在购买的JN5139中已经由JENNIC烧入了其开发的ZIGBEE协议。一般的用户也没有必要重复写ZIGBEE协议,但是成本也相应的增加了,这也是JENNIC公司的一种市场策略,卖IC兼卖协议,而TI的CC2430等芯片内部是用户可重复擦写的ROM(FLASH ROM),所以TI也没有在其IC中集成协议,而是提供ZIGBEE协议给用户,TI公司是靠卖IC生存的,这也是其不同的市场策略形成的原因。

 

如何使用芯片内部的协议:

在编程时是如何调用原本就存在芯片内部的协议代码?JENNIC在制作其库函数时就考虑了这一点,比如某个C函数f1()存在内部的0x00001000处,则该函数在芯片内部则已经定位了,并且在出厂前就已经将其烧入了JN5139中,所以如果在用户程序中要调用f1()函数,就必须知道其位置,这就是库函数的作用,编程时是要使用库函数的,而库函数的位置信息,应该在其库函数中已经定位了,也就是说在库函数中有f1()的位置信息:0x00001000,所以调用f1(),也就是程序跳到0x00001000处执行,执行完后返回结果并恢复到执行f1()之前的CPU寄存器状态。

系统分类: 通信网络  |  用户分类: ZigBee  |  标签: JENNIC TI ZigBee 策略  |  来源: 原创  | 

点击查看原文

发表评论 阅读全文(737) | 回复(0)

发表于 2008/9/18 15:13:08

2

关于投票

JENNIC的策略

JENNIC公司生产的JN51XX系列的32位无线SOC,集成了2.4G收发器,可用在无线传感网络,zigbee等网络中。

从JENNIC公司的网站上下载JN5139的datasheet ,你或许会觉得很纳闷,他们在手册里也说的很清楚,他们不提供具体到寄存器如何操作这一类的说明文档,在们的芯片datasheet里也体现了这一点,没有如51、ARM等这些常见的芯片那样,教你怎么使用芯片中的每一个寄存器。而且他们对自己的MCU内核结构也讳莫如深,人家玩的就叫神秘。但是人家卖芯片的不告诉你怎么用最底层的东西,那也得告诉你怎么用上层的----对!他们有自己的一套如何操作硬件的API函数,你拿着API函数的手册对着手册上操作这些函数就可以操作硬件了,这对于应用层的开发者而言确实很诱人。他们这么做的目的之一当然是不公开内核结构,从而保护自己的协议栈。

而且JN51XX的内部程序存储器是ROM形式的,ROM里保存了BootLoader、协议栈等内容,用户是不可以编程的,用户程序保存在外部SPI接口的FLASH Memory中,芯片在复位后,根据BootLoader协议将外部Memory 中的内容读到内部RAM执行,也就是说用户的应用程序是保存在外部的存储器中,这也使得用户编写的程序很难得到保密。但是JENNIC 的JN51XX内部的ROM,你是没有办法读取其中的内容的,也就是说,JENNIC的zigbee协议栈,你是不能从芯片内读出,但是应用程序保存在外部存储器中,却不能保密,这无疑是JENNIC做这款芯片的败笔之一。

 

系统分类: 单片机  |  用户分类: ZigBee  |  标签: JENNIC zigbee JN5139  |  来源: 原创  | 

点击查看原文

发表评论 阅读全文(620) | 回复(0)

Total , Page /