当前位置:首页 >> 信息与通信 >>

SimpliciTI API使用指南英文翻译


SimpliciTI应用程序接口
文档编号: SWRA221

美国加利福尼亚州圣迭哥德州仪器有限公司

版本号 1.0 1.1 1.2

说明 最初版本 更新到1.1.0版本 最新的修改记录

日期 2008/08/01 2009/01/14 2009/03/24

1 绪论
1.1 目的
本文档描述了 SimpliciTI 软件的应用程序接口。 应用程序接口给 SimpliciTI 协 议栈工作提供了一个接口。

1.2 参考书目
1. SimpliciTI1.1.0 版本说明书。 2. SimpliciTI 开发者注意事项。

1.3 字体使用
一些专用的字体:
字体 常规字体 带下划线的蓝色正文 用法 用于文件名、代码段、符号和代码示例。 文件交叉引用链接

1.4 缩略语和定义
API BSP CCA GPIO ISR LED LQI LRU MAC PHY RSSI 应用程序编程接口。 板级支持包 清除信道评估 通用输入输出 中断服务例程 发光二极管 链接情况指示 最近应用 介质访问控制。 物理层。 接收信号强度指示器

2 应用程序接口概述
2.1 接口机制
下面的接口机制应用于 SimpliciTI 的应用程序接口。 2.1.1 直接执行函数调用 这些应用程序接口函数直接执行代码进行工作,函数在执行时联系前后调用, 这些函数可能有鉴定识别的部分。 2.1.2 回调函数 在 SimpliciTI 协议中又一次随意回调的机会, 这样的函数必须在应用中定义和 执行,并且在初始化时要声明。在运行中断程序时,函数回调的实现应避免 CPU 强 制操作,这一函数将在第 7 部分做详细的描述。

2.2 数据接口
这些接口支持 SimpliciTI 协议栈和应用程序之间的发送和接收数据,并最终支 持点对点通讯。

2.3 普通常量和结构体
2.3.1 公共数据类型 下面定义: typedef signed typedef signed typedef signed typedef unsigned char short long char int8_t; int16_t; int32_t; uint8_t; uint16_t; uint32_t; linkID_t; smplStatus_t;

typedef unsigned short typedef unsigned long typedef unsigned typedef enum char

smplStatus

另外一些类型和结构体用于 IOCTL 接口,这些将在第 6 部分中详细说明。 2.3.2 状态 下列状态值用于各种 API 函数。这些都是 Status_t 类型的值。每个 API 象征

的相应的返回代码将会在后续章节中详细说明。
名称 SMPL_SUCCESS SMPL_TIMEOUT SMPL_BAD_PARAM SMPL_NOMEM SMPL_NO_FRAME SMPL_NO_LINK SMPL_NO_JOIN SMPL_NO_CHANNEL SMPL_NO_PEER_UNLINK SMPL_TX_CCA_FAIL SMPL_NO_PAYLOAD SMPL_NO_AP_ADDRESS 描述 操作成功 同步调用超时 在调用错误的参数值 无可用内存。依赖于对象的 API 在输入帧队列中没有可用帧 没有收到答复的链接帧发送 没有收到答复加入帧发送 频道扫描没有 1 个通道响应 同行无法删除连接。在答复信息返回到中断请求(不正式 支持) 帧传输失败,因为清除信道评估失败 收到帧但没有得到有效载荷应用 我们没有收到一个接入点的地址

2.3.3 专用链接标识 SimpliciTI 协议支持由应用程序默认的专用链接标识,下面的值表示的专用链 接标识。
名称 SMPL_LINKID_USER_UUD 描述 未连接的用户数据链路标识。这是一个专用的,无连接链 路的编号,它默认被所有用户应用程序所支持。

3 初始化接口
3.1 简介
SimpliciTI 初始化涉及三个初始化阶段:板级、无线和堆栈初始化,并特意把 板级初始化 (BSP) 与无线和堆栈初始化分开: 无线和堆栈的初始化作为 SimpliciTI 初始化调用的结果同时发生;板级初始化可以单独地调用。我们可以不考虑 SimpliciTI API 部分,但还是要注意到初始化的完整性。 把板级的初始化分离开来,这样做是为了客户可以使用自己的目标设备的 BSP。使板级的初始化明确与 SimpliciTI 初始化分开,可以更容易地移植到另一个 目标设备。 3.1.1 板级初始化 SimpliciTI 支持最小板级特定的板级初始化,板级初始化包括 LED 的 GPIO 引脚配置、开关配置和一个服务协议事务的计数器/定时器,它还包括双核射频设 计需要的 SPI 初始化。 3.1.2 无线初始化 无线寄存器的改写和无线模块的设置都发生在供电、空闲状态。大部分无线 寄存器都是基于 SmartRF Studio 输出代码,并且默认的通道设置在频道表的第一 项。 3.1.3 堆栈初始化 初始化所有的数据结构和网络应用程序,此外,该堆栈产生一个代表该设备 的加入请求,在没有中心处理节点的拓扑结构中加入请求将失败,这是提前在拓 扑结构中设置的,而不是一种错误情况。 这种技术在有中心处理节点时,连接失败是一种错误,在应用程序中就应该 尝试重新加入或者是采取其它措施。

3.2 BSP_Init()
3.2.1 函数说明 它虽然不严格属于 SimpliciTI 应用程序接口, 但调用这个初始化函数可以初始 化目标板硬件。该函数应在调用 SMPL_Init()前执行。

3.2.2 函数原型 void BSP_init(void) 3.2.3 详细参数 无。 3.2.4 返回值 无。

3.3 SMPL_Init()
3.3.1 函数说明 这个函数初始化无线和 SimpliciTI 协议栈,并且必须在软件运行和调用任何 SimpliciTI 应用程序接口函数前调用一次。 3.2.2 函数原型 smplStatus_t SMPL Init(uint8_t (*callback)(linkID_t)) 3.3.3 详细参数
参数 callback 描述 指针的功能,可以对应一个 linkID_t 参数返回一个 uint8_t 参数

非空的声明回事的被调用的函数成为回调函数并被注册。由于该函数只被调 用一次,该回调函数服务与平台上的所有逻辑终端设备。 3.3.4 返回值 可能的状态如下:
状况 SMPL_SUCCESS 描述 初始化成功 没有连接回应,可能是没有中心处理节点, 在拓扑中无中心处理节点时 SMPL_NO_JOIN 不是错误。 1、只有当频率变换时; SMPL_NO_CHANNEL 2、如果没有 AP; 3、频率通道扫描会失败。

4 连接接口
4.1 简介
此接口提供了建立两个对等节点之间连接的机制。

4.2 SMPL_Link()
4.2.1 函数说明 这个函数的调用发送了一个广播连接帧后等待应答,一接到应答,两节点之 间的连接就被建立,一个链接 ID 作为应用层对连接的处理结果被指定使用。 这个调用等待一个应答,如果在一定时间内没有接收到应答也会返回,所以 他不是一个严格的模块化调用,等待时间的缩放是基于帧的长度和数据传输速度 并且在自动初始化过程中确定。 这个函数可以多次调用来建立多个逻辑连接,在同级节点中可能连接相同或 不同的设备。 4.2.2 函数原型 smplStatus_t SMPL_Link(linkID_t *lid) 4.2.3 详细参数
参数 lid 描述 这个参数是一个指向 Link ID 指针,如果调用成功,指针指向的变量将 有效,并将在随后的具体节点应用程序接口中使用,用来指向特定的 设备。

4.2.4 函数返回 可能的状况如下:
状况 SMPL_SUCCESS SMPL_NO_LINK SMPL_NOMEM SMPL_TX_CCA_FAIL 描述 连接成功。 在等待其间没有连接应答。 没有空间分配给当地的接收端口,没有更多的连接表空间,或 没有在输出帧队列空间。 无法发送链接帧。

4.3 SMPL_LinkListen()
4.3.1 函数说明 这个函数侦听一个广播的连接帧,当收到一个连接帧时,他会直接向发送节 点返回一个应答。 这个函数调用是一个修改后的模块调用,他将把 “for a while” 模块化成下面 这个设置在 nwk_api.c 源文件中的常量所描述的那样。
常数 LINKLISTEN_MILLISECONDS_2_WAIT 描述 数毫秒阻止听取链接帧。默认值为 5000(5 秒)

如果侦听超时,应用程序可以实现恢复策略。这包括建立另一个侦听窗口。 注意存在这样一种间隙情况,侦听调用在超时后被调用时,有可能一个链接帧在 其不侦听的这一小段时间内到达。 4.3.2 函数原型 smplStatus_t SMPL_LinkListen(linkID_T *lid) 4.3.3 详细参数
参数 lid 描述 这个参数是一个指向Link ID指针,如果调用成功,指针指向的变量将有 效,并将在随后的具体节点应用程序接口中使用。

4.3.4 函数返回 可能的状况如下:
状况 SMPL_SUCCESS SMPL_TIMEOUT 描述 连接成功。 在侦听时间内没有接收到连接,Link_ID无效。

5 数据接口
5.1 简介
应用程序接口提供了发送和接收端之间的数据接口。

5.2 SMPL_SendOpt()
5.2.1 函数说明 此函数利用能指定传输选项的能力,把应用数据发送到指定节点。该网络的 代码需要适当地为无线服务做调整,在完成调用之前无线将处于同一状态,应用 将一直不做任何处理直到无线达到一定要求。 默认情况下,一直试图强制发送 CCA。 5.2.2 函数原型 smplStatus_t SMPL_SendOpt(linkID_t lid, uint8_t *msg, uint8_t len. txOpt_t opts) 5.2.3 详细参数
参数 lid msg len opts 描述 用来发送信息目标节点的连接ID 消息指针寄存器。 消息的长度。这可以是 0。在没有应用情况下发送消息负载是合法的。 被选择的有效传输选项的位图。

?lid ?参数必须在先前一个成功链接时确定,除了未连接用户自带寻址信息的 LINK ID (参见 2.3.3 节) 这个 link ID 总是有效。 , 由于这种连接不是基于连接的, 使用这一 ID 的信息可以作为有效的数据表发送到所有应用节点。 有效的传输选项是:
选项 SMPL_TXOPTION_NONE SMPL_TXOPTION_ACKREQ 描述 没有选择。 来自目标节点的请求确认。同步调用。 No options selected.

5.2.4 返回值
状况 SMPL_SUCCESS SMPL_BAD_PARAM SMPL_NOMEM SMPL_TX_CCA_FAIL SMPL_NO_ACK 描述 传送成功。 无效的入口连接ID; 入口连接数据不合适; 无消息或者消息太长。 输出数据针队列没有空间。 通信配置失败,发送数据不成功。 未接收到确认。

5.3 SMPL_Send()
5.3.1 函数说明 这个函数是把应用数据发送到一个节点。除了传送选择项,应用编程接口和 SimpliciTI 早期的版本保持一致。这个应用编程接口相当于以指定的 SMPL_TXOPTION_NONE 参数调用 SMPL_SendOpt()。 该网络的代码需要适当地为无线服务做调整,在完成调用之前无线将处于同 一状态,应用将一直不做任何处理直到无线达到一定要求。 默认情况下,一直试图强制发送 CCA。 5.3.2 函数原型 smplStatus_t SMPL_Send(linkID_t lid, uint8_t *msg, uint8_t len) 5.3.3 详细参数
参数 lid msg len 描述 目标节点的连接ID。 指向消息存储空间的指针。 消息的长度。这可以是0。在没有应用情况下发送消息负载是 合法的。用负荷负载是合法的。

‘lid ’参数必须在先前一个成功链接时确定,除了未连接用户自带寻址信息的 LINK ID (参见 2.3.3 节) 这个 link ID 总是有效。 , 由于这种连接不是基于连接的, 使用这一 ID 的信息可以作为有效的数据表发送到所有应用节点。 5.3.4 函数返回值 可能的状况如下:
状况 SMPL_SUCCESS SMPL_BAD_PARAM SMPL_NOMEM SMPL_TX_CCA_FAIL 描述 传输成功。 没有有效的链接入口的ID;链接入口数据不合适; 没有信息 或者是信息太长。 输出数据针对列没有空间。 通信配置失败,未能发送消息。

5.4 SMPL_Receive()
5.4.1 函数说明 这个函数的功能就是核对从任何节点收到的数据帧数组。 除非设备是轮流检测设备,否则他将不会激活无线或者不会将无线的状态转 换为接收模式,他所做的只是去核对接收到的数据帧是否为指定的连接。

如果设备是在配置文件中指定了的设备(参见 the Developers Notes 中的 9.2 节),网络层将要使能无线发送轮流检测的申请,并接受应答。在这种情况下, 调整无线模块将不再是应用层的任务。 如果指定的节点有不只一个可用的数据帧,它们将遵循先进先出原则进行被 返回,从而,需要多个调用来找回多个帧。 5.4.2 函数原型 smplStatus_t SMPL_Receive(linkID_t lid, uint8_t *msg, uint8_t *len) 5.4.3 详细参数
参数 lid msg len 说明 用这个连接ID说明信息是从那个节点来 消息指针,指向装有接到的信息寄存器 只想装有接收到的信息长度的寄存器

‘lid ’参数必须在先前一个成功链接时确定,除了未连接用户自带寻址信息 的 LINK ID(参见 2.3.3 节),这个 link ID 总是有效。应用程序必须保证接收寄 存器足够的大以用来接收消息。为了防止接收寄存器溢出,最好的策略就是提供 一个和最大负载同样大小的缓存器,就像在网络层定义的数据结构时的 MAX_APP_PAYLOAD 一样大。 5.4.4 函数返回值 可能的状态如下:
状态 SMPL_SUCCESS SMPL_BAD_PARAM SMPL_NO_FRAME SMPL_NO_PAYLOAD SMPL_TIMEOUT 说明 取得连接ID,“ msg”and “len ”有效。 没有有效的连接入口ID; 链接入口的数据不合适。 没有可用的数据帧 接收到的数据真没有有效负荷负载, 不是一个严格错误, 由于返回 值是0,在应用程序中可以一推算出有效负荷负载。 轮流检测的设备:没有收到来自AP的应答。

SMPL_NO_AP_ADDRESS 轮流检测的设备:不知道AP 的地址。 SMPL_TX_CCA_FAIL SMPL_NOMEM SMPL_NO_CHANNEL 轮流检测的设备:不能按要求向AP发送数据 轮流检测的设备:在输出数据帧数组里没有存储空间 轮流检测的设备:频率变更使能, 并且不能找到转换通道。

天津职业技术师范大学 2010 届本科生毕业设计(论文)

6 设备管理:IOCTL 接口
6.1 简介
ioctl 接口使应用程序能更精确的控制设备。这种指定了对象、行为、和任何与该 对象和行为有关的接口有种一般形式。 接口有足够大的应用范围, 所以各种形式的控制都可以根据自己的情况基于一般 形式接口进行描述。因为接口层是很的通用,所以用户可以很容易的扩展应用。

6.2 通用常量和结构
下面将描述 ioctl 的对象和行为,随调用提供的参数信息因对象不同而各有差异。 详细参数结构说明将在接口描述后的章节中进行,每个接口将单独描述。 6.2.1 IOCTL 的对象 下面是定义的对象会在 API 概述后的独立章节中进行讨论。 enum ioctlObject { IOCTL_OBJ_FREQ, IOCTL_OBJ_CRYPTKEY, IOCTL_OBJ_RAW_IO, IOCTL_OBJ_RADIO, IOCTL_OBJ_AP_JOIN, IOCTL_OBJ_ADDR, IOCTL_OBJ_CONNOBJ, IOCTL_OBJ_FWVER, IOCTL_OBJ_PROTOVER, IOCTL_OBJ_NVOBJ, IOCTL_OBJ_TOKEN }; typedef enum 6.2.2 IOCTL 的作用 下面定义的动作将在 API 概述之后的相关章节中进行讨论。 Enum ioctlAction ioctlobject ioctl object_t;

天津职业技术师范大学 2010 届本科生毕业设计(论文)

{ IOCTL_ACT_SET, IOCTL_ACT_GET, IOCTL_ACT_READ, IOCTL_ACT_WRITE, IOCTL_ACT_RADIO_SLEEP, IOCTL_ACT_RADIO_AWAKE, IOCTL_ACT_RADIO_SIGINFO, IOCTL_ACT_RADIO_RSSI, IOCTL_ACT_RADIO_RXON, IOCTL_ACT_RADIO_RXIDLE, IOCTL_ACT_RADIO_SETPWR, IOCTL_ACT_ON, IOCTL_ACT_OFF, IOCTL_ACT_SCAN, IOCTL_ACT_DELETE }; typedef enum ioctlAction ioctlAction_t;

6.3 SMPL_Ioctl()
6.3.1 函数说明 所有IOCTL调用采用的单一格式。 6.3.2 函数原型 smplStatus_t SMPL_Ioctl(ioctlObject_t obj, ioctlAction_t act, void *val) 6.3.3 详细参数
参数 obj act val 说明 发生动作的对象。 指定对象要发生的动作。 参数信息的指针。因动作不同可能是输入或输出动作。如果对象/动作组合不需 要参数信息,也可为空值NULL。

所有调用?val?的情况应该有所参考,比如,一个真实的指针。不要向无类型的 val 赋值。内部代码获取变量的值,好像它是一个到对象的指针,这对单个变量来说 确实不方便,但却具有使接口前后一致的好处。

天津职业技术师范大学 2010 届本科生毕业设计(论文)

6.3.4 函数返回值
状态 SMPL_SUCCESS SMPL_BAD_PARAM 说明 操作成功 ioctl 对象或者 ioctl 行为不合法。

额外返回值取决于指定对象。这些值将被描述在后续章节。

6.4 IOCTL 的对象/行动接口说明
6.4.1 初始 I / O 6.4.1.1 支持结构体定义 下面的结构体支持该对象: typedef struct { uint8_t } addr_t; typedef struct { addr_t uint8_t uint8_t uint8_t typedef struct { addr_t uint8_t uint8_t uint8_t uint8_t *addr; *msg; len; port; hopCount; *addr; *msg; len; port; addr[NET_ADDR_SIZE];

} ioctlRawSend_t;

} ioctlRawReceive_t; 6.4.1.2 接口详细说明 这个对象允许发送和接收来自任意目标地址/端口组合。通常应用程序必须使用 连接计划建立对等连接。这个对象允许无条件通信。这种支持在 NWK 层本身被广泛 使用。请注意,该接口需要调用者提供一个完整的应用地址(设备地址和端口号),而

天津职业技术师范大学 2010 届本科生毕业设计(论文)

不是一个从应用程序运行的链接 ID。
目标 作用 数据类型 注释

IOCTL_ACT_READ IOCTL_OBJ_RAW_IO IOCTL_ACT_WRITE

被执行时返回指定端口上的 最早的帧载荷。除了附加信 ioctlRawReceive_t 息,和SMPL_Receive()调用 是一样的。 ioctlRawSend_t 发送封装载荷到指定地址/ 端口组合

6.4.1.3 函数返回值 6.4.1.3.1 IOCTL_ACT_WRITE 可能的状态情况如下:
STATUS SMPL_SUCCESS SMPL_NOMEM SMPL_TX_CCA_FAIL DESCRIPTION 传送成功 输出帧数组中没有空间 CCA失败

6.4.1.3.2 IOCTL_ACT_READ 可能的状态情况如下:
状态 SMPL_SUCCESS SMPL_NO_FRAME 说明 发现数据帧端口号,“msg”和“len”内容有效。 没有可用的数据帧。

6.4.2 无线管理 一些简单的无线控制的功能目前已经上市。 在这个时候接口不支持直接访问无线 配置寄存器。 6.4.2.1 支持结构体定义 typedef int8_t rssi_t; typedef struct { rssi_t rssi; uint8_t lqi; } rxMetrics_t; typedef struct { linkID_t lid; /* input: port for which signal info desired */ rxMetrics_t sigInfo;

天津职业技术师范大学 2010 届本科生毕业设计(论文)

} ioctlRadioSiginfo_t; enum { IOCTL_LEVEL_0, IOCTL_LEVEL_1, IOCTL_LEVEL_2 }; typedef enum 6.4.2.2 接口详细说明
目标对象 操作 IOCTL_ACT_RADI O_SLEEP IOCTL_ACT_RADI O_AWAKE IOCTL_ACT_RADI O_SIGINFO IOCTL_ACT_RADI O_RSSI IOCTL_ACT_RADI O_RXON IOCTL_ACT_RADI O_RXIDLE IOCTL_ACT_RADI O_SETPWR* 数据类型 NULL NULL ioctlRadioSiginfo_t rssi_t NULL NULL ioctlLevel_t 注释 在MCU休眠前操作,切换无线状态, 必须保存无线寄存器 在MCU唤醒前操作,必须恢复所有无 线寄存器 在指定端口获取前一帧的信号强度信 息 获得当前RSSI值 把无线置于接收状态 把无线模块置于空闲状态,节省能量 设置输出能量级(和EXTENDED_API 一起使用来建立时间宏定义)

ioctlLevel

ioctlLevel

ioctlLevel_t;

IOCTL_OB J_RADIO

6.4.2.3 Return 6.4.2.3.1 无目标对象
状态 SMPL_SUCCESS 说明 这个调用总是会成功的

6.4.2.3.2 ioctlRadioSiginfo_t object 请求状态如下:
状态 SMPL_SUCCESS SMPL_BAD_PARAM 说明 接收到的信息有效 参数结构体未指定有效的Link ID连接信息

6.4.2.3.3 rssi_t object 请求状态如下:
状态 SMPL_SUCCESS 说明 RSSI值有效,这个调用总是会成功的

6.4.2.3.4 ioctlLevel_t object

天津职业技术师范大学 2010 届本科生毕业设计(论文)

请求状态如下:
状态 SMPL_SUCCESS SMPL_BAD_PARAM 说明 指定的能量层次有效并被设定 指定的能量层次无效

6.4.3 数据节点加入管理 为了增加对设备接入 SimpliciTI 网络的能力的控制, 协议使用令牌来加入网络或 者建立等对等点。附加的控制提供允许 AP 拒绝处理加入请求帧,除非在前后被设置 成是允许这一处理。目的是,如果设备不能加入网络,就得不到该网络的连接令牌, 因此无法和其它任何设备相连接。 6.4.3.1 接口详细说明
目标对象 IOCTL_OBJ_AP_JOIN 操作 IOCTL_ACT_ON IOCTL_ACT_OFF 数据类型 NULL NULL 注释 允许加入处理 忽略加入处理

6.4.3.2 返回值
状态 SMPL_SUCCESS 说明 这个调用总是会成功的

6.4.4 设备地址分配 这个应用接口允许应用程序撤销构建时设备对地址的设。 如果应用程序运行时产 生了设备地址,该接口就被用来设置这一地址。设备地址设定必须在 SMPL_Init()前 进行, 否则构建时地址会被使用。 一旦这个地址分配在任一情况下 (预初始化 ioctlcall 或者通过 SMPL_Init())被设置了就不能再修改。 6.4.4.1 支持结构体定义 typedef struct { uint8_t addr [NET_ADDR_SIZE]; } addr_t; 6.4.4.2 接口详细说明
目标对象 IOCTL_OBJ_ADDR 操作 IOCTL_ACT_SET IOCTL_ACT_GET 数据类型 addr_t addr_t 注释 设置数据指针地址 从指定地址返回地址信息

6.4.4.3 返回值
状态 说明

天津职业技术师范大学 2010 届本科生毕业设计(论文) SMPL_SUCCESS 这个调用总是会成功的

6.4.5 频率管理 通过这个接口,可以设置或者获得当前逻辑通道。也可以进行扫描。 这个接口 网络层支持支持跳频时被使用。 6.4.5.1 结构体定义 typedef struct { uint8_t } freqEntry_t; typedef struct { uint8_t numChan; *freq; freqEntry_t logicalChan;

} ioctlScanChan_t;
6.4.5.2 接口详细说明 目标对象 操作 IOCTL_ACT_SET IOCTL_ACT_GET IOCTL_OBJ_FREQ IOCTL_ACT_SCAN ioctlScanChan_t 数据类型 freqEntry_t freqEntry_t 注释 设定指定数值的逻辑信道 向指定地址返回逻辑信道 扫描所有信道的回应。回 应被接受的信道序号被返 回到指定的reqEntry数组

6.4.5.3 返回值 6.4.5.3.1 IOCTL_ACT_SET
状态 SMPL_SUCCESS SMPL_BAD_PARAM 状态 SMPL_SUCCESS 说明 操作成功 请求信道序号超出允许范围 说明 这个调用总是会成功的

6.4.5.3.2 IOCTL_ACT_GET

6.4.5.3.3 IOCTL_ACT_SCAN
状态 SMPL_SUCCESS 说明 这个调用总是会成功的, 然而信道数在返回的参数结构体中可以是 0,这意味着没有会找到信道。调用者应确保检查了信道数目成员。

天津职业技术师范大学 2010 届本科生毕业设计(论文)

6.4.6 链接管理 下列接口运行时移除指定链接 ID 的链接入口, 并且是在不警示节点的情况下就 断开连接。 6.4.6.1 接口详细说明
目标对象 IOCTL_OBJ_CONNOBJ 操作 IOCTL_ACT_DELETE 数据类型 linkID_t 注释 从链接ID指针指定的连接 链表中删除本地连接

Link ID SMPL_LINKID_USER_UUD 不是一个有效的调用对象。 6.4.6.2 返回值
状态 SMPL_SUCCESS SMPL_BAD_PARAM 说明 操作成功 LINK_ID是SMPL_LINK_ID_USER_UUD或者无信息

6.4.7 固件版本 6.4.7.1 宏定义 #define SMPL_FWVERSION_SIZE 4 6.4.7.2 接口详细说明 运行中的固件版本可以被检索。这是一个只读对象。
目标对象 IOCTL_OBJ_FWVER 操作 IOCTL_ACT_GET 数据类型 uint8_t 注释 检索一个字节数组作为 当前的固件版本。

固件版本是一个 SMPL_FWVERSION_SIZE 大小的字节数组,有如下形式:
字节 0 1 2 3 注释 主版本号 二级版本号 维护版本号 特刊版本号

每个字节中的数值是二进制的数。 6.4.7.3 返回值
状态 SMPL_SUCCESS 说明 这个调用总是会成功的

天津职业技术师范大学 2010 届本科生毕业设计(论文)

6.4.8 协议版本 版本协议可以确定前后工作协调能力或者取消操作进程, 在加入网络和连接时都 会用到,如果版本不匹配,加入和链是会被拒绝。一些版本支持向下兼容。 6.4.8.1 接口详细
目前的协议版本,是只读的。

目标对象 IOCTL_OBJ_PROTOVER

操作 IOCTL_ACT_GET

数据类型 uint8_t

注释 协议版本

6.4.8.2 返回值
状态 SMPL_SUCCESS 说明 这个调用总是会成功的

6.4.9 静态存储对象 6.4.9.1 结构体定义 typedef struct { uint8_t uint16_t uint8_t * objVersion; objLen; *objPtr;

} ioctlNVObj_t; 6.4.9.2 Interface details
目标对象 IOCTL_OBJ_NVOBJ 操作 IOCTL_ACT_GET 数据类型 ioctlNVObj_t 注释 返回版本、长度以及链接文本的 指针

如果 objPtr 值为空则只传送版本和长度两个 N 对象 V。注意这个接口提供了一 个危险的入口到内存中的链接文本, 应用程序必须注意避免扰乱这一部分内存或直接 修改文本。 6.4.9.3 返回值
状态 SMPL_SUCCESS SMPL_BAD_PARAM 说明 操作成功 一个动作已被指定,IOCTL_ACT_GET除外

6.4.10 Network 通道令牌 通过这个接口可以获得加入令牌和链接令牌, 扩展 API 函数建立时间宏定义时会

天津职业技术师范大学 2010 届本科生毕业设计(论文)

使能这个功能。 6.4.10.1 支持的定义 enum tokenType { TT_LINK, TT_JOIN }; typedef enum typedef union { uint32_t linkToken; uint32_t joinToken; } token_t; typedef struct { tokenType_t tokenType; token_t token; } ioctlToken_t 6.4.10.2 接口详细信息
目标对象 IOCTL_OBJ_TOKEN IOCTL_ACT_SET ioctlToken_t 到指定的令牌目标地址设置令牌值 操作 数据类型 object 注释 获取指定的令牌值赋给令牌对象

/*链接令牌*/ /*加入令牌*/ tokenType tokenType_t;

/* 组合可以使任意令牌转化类型变得简单*/

IOCTL_ACT_GET ioctlToken_t

6.4.10.3 返回值
状态 SMPL_SUCCESS SMPL_BAD_PARAM 除TT_LINK、TT_JOIN 之外的令牌或除IOCTL_ACT_GET之外的动 作已被指定 说明

天津职业技术师范大学 2010 届本科生毕业设计(论文)

7 应答接口
7.1 简介
在初始化的时候,向初始化提供一个函数指针作为调用参数以被注册。这个 函数必须由应用程序提供。

7.2 回调函数详细说明
7.2.1 函数说明 当接收到的数据结构里包含一个有效的应用目标地址时,在接收中断服务程 序中调用回调函数(如果已经注册) 。 7.2.2 函数原型 uint8_t sCallBack( linkID_t lid)

7.2.3 详细参数
参数 lid 说明 接收数据结构限制连接的链接ID

在调用这个函数的时候回调函数中的参数将会和接收数据结构中的链接 ID 一 起移动,这是回调函数辨别告诉哪个节点发送了一个数据结构或者可能需要服务 的一种方式。专用的链接 ID SMPL_LINKID_USER_UUD 在这种程序里总是有效 的。 为了连接成功,在调用 SMPL_Receive()时应使用提供的链接 ID,这是数据结 构能够被接收到的唯一手段。 7.2.4 函数返回值 回调参数必须是 0 或者是 non-zero,这是由程序员去负责操作。如果函数返回 值是 0,接收帧就被留在输入帧中以待后用户进程的检索,这是推荐的编程思路。 回调函数可以简单的置标志位,要不然就存储等待帧的信息。SMPL_Receive()的 实参应该在用户进程中赋值。如果返回值是 non-zero,为了立即重新使用,帧资源 会被释放。这就意味着应答这个函数已经选取它所要的有效的信息。

天津职业技术师范大学 2010 届本科生毕业设计(论文)

8 扩展应用接口程序
8.1 简介
如果 EXTENED_API 宏被定义在整个工程结构中,扩展的 API 符号就会被激 活。这将在下一节中进行描述。为节省代码空间,这些符号在默认情况下是不启 用。如果宏定义了,则所有的符号都包含在内。

8.2 SMPL_Unlink()
8.2.1 函数说明 这个应用程序接口以常规的方式断开连接。断开连接包含两个动作。首先, 本地连接被无条件断开,调用这个函数之后,所有涉及到 Link ID 的内容将会返回 一个 SMPL_BAD_PARAM 值。 第二是给节点发送一个信息,告诉节点链接即将结束。这个呼叫后一直等待 应答信号。如果接收到信号,信号包含尝试终止连接节点的结果;如果无应答, 将会收到一个返回值,以此表断开连接未成功。 8.2.2 函数原型 smplStatus_t SMPL_Unlink(linkID_t lid) 8.2.3 详细参数
参数 lid 说明 使链接的link ID 无效。

8.2.3 函数返回值 请求状态如下:
状态 SMPL_SUCCESS SMPL_BAD_PARAM SMPL_TIMEOUT SMPL_NO_PEER_UNLINK 说明 两个节点链接均不成功。 没有发现Link ID。 从目标节点无回应。 节点没有指定连接的的连接表入口。

8.3 SMPL_Ping()
8.3.1 函数说明 这个应用接口程序代替用户应用程序在网络层执行 NWK Ping 程序。 他将 Ping

天津职业技术师范大学 2010 届本科生毕业设计(论文)

与指定节点有关的设备。注意 ping 的不是节点本身,而是设备所伺服的节点。这 大概上和 TCP/IP 协议的信报控制协议差不多。 这给用户提供了方便,他可以用于看是否有伺服设备存在。由于接口不直接 和节点本身对话,所以它只能验证伺服节点的设备的存在。 这个应用接口程序还有个方便的副作:如果跳帧使能,它会在当前信道上无 法接受回复的情况下扫描信道列表上的信道。所以,应用程序能自动发现改变了 的信道,而无须执行自己的信道扫描程序。 8.3.2 函数原型 smplStatus SMPL_Ping(linkID_t lid) 8.3.3 详细参数
参数 lid 说明 设备要被Ping的节点的Link ID。

8.3.3 函数返回值
状态 SMPL_SUCCESS SMPL_TIMEOUT 说明 Ping 成功。 没有应答节点。

8.4 SMPL_Commission()
8.4.1 函数说明 这个应用接口程序用于静态生成链接表项目,这就要求在连接项目表中有详 细的链接目标节点的信息。如果两个节点都使用这个应用程序接口,一个连接无 需详尽的连接处理就可以确定。 当用它产生静态链接时, 用户必须先前知道每个节点的 SimpliciTI 地址,除此 之外,本地和远程端口必须分配,一个设备上的本地节点端口必须符合另一个设 备上的远程节点的端口,它们可能有相同的值,但是在每个节点的指定设备上应 该是特有的。 用户端口地址分为静态和动态部分,静态空间的大小是由.\ Components \ nwk.h 文件中的 PORT_USER_STATIC_NUM 指定的,在调用该 API 时必须从这部 分区域中单独划出来,初始默认值是 1。静态端口地址开始地址是 0X3E,依次递 减。 8.4.2 函数原型 smplStatus_t SMPL_Commission(addr_t *peerAddr, uint8_t locPort, uint8_t

天津职业技术师范大学 2010 届本科生毕业设计(论文)

rmtPort, linkID_t *lid) 8.4.3 详细参数
参数 peerAddr locPort rmtPort lid 说明 节点地址指针 本地静态端口分配 远程静态端口分配 目标Link ID指针,它的值有NWK设定

8.4.3 函数返回值
状态 SMPL_SUCCESS SMPL_BAD_PARAM SMPL_NOMEM 说明 连接成功 Link ID 指针无效 (无值) 或者端口超出范围 链接表项目空间不足

天津职业技术师范大学 2010 届本科生毕业设计(论文)

9 扩展支持 9.1 简介
除 SimpliciTI 的应用程序接口外,为了方便,也还有各种宏定义和功能函数可 以使用。由于示例程序的开发,某些帮助程序形式的支持显得很明智。 它们将在以下几个部分进行说明。这些宏定义是在 nwk_types.h 中定义的。

9.2 NWK_DELAY()
9.2.1 函数说明 这个宏定义实现指定为毫秒的同步延时。它不是精确的延时,所以精确延时 不要使用。 9.2.2 函数原型 NWK_DELAY(uint16_t msDelay) 9.2.3 参数说明
参数 msDelay 说明 延时毫秒数

9.2.4 函数返回值 无!

9.3 NWK_REPLY_DELAY()
9.3.1 函数说明 一个应用程序向一个节点发送一个信息后并希望得到应答时,可以调用这个 宏定义。这个延时一旦收到下一帧或者达到最大时间时就会终止。最大延时时间 在堆栈初始化时装载,其数值是有数据速率和最大负载长度所确定的。 一个使用了该定义的信息交换示例如后文所示。 9.3.2 函数原型 NWK_REPLY_DELAY()

天津职业技术师范大学 2010 届本科生毕业设计(论文)

9.3.3 参数说明 无! 9.3.4 函数返回值 无! 9.3.5 宏使用范例 下面的代码是不完整的,参数申明和代码核对在次没有列出,但是涉及到的 符号参数是相似的。 /* 发送信息到一个 Link ID 为'linkID' 的节点*/ { /* 唤醒无线模块*/ SMPL_Ioctl(IOCTL_OBJ_RADIO, IOCTL_ACT_RADIO_AWAKE, 0); /*发送信息*/ SMPL_Send(linkID, &sendMsg, sizeof(sendMsg)); /* 无线模块必须处于 Rx 状态以接收数据。然后回到空闲状态 IDLE 以省电*/ SMPL_Ioctl( IOCTL_OBJ_RADIO, IOCTL_ACT_RADIO_RXON, 0); NWK_REPLY_DELAY(); SMPL_Ioctl( IOCTL_OBJ_RADIO, IOCTL_ACT_RADIO_RXIDLE, 0); /* 获取收到的回复 */ SMPL_Receive(linkID, &rcvMsg, &rcvMsgLen); /* 关闭无线模块*/ SMPL_Ioctl( IOCTL_OBJ_RADIO, IOCTL_ACT_RADIO_SLEEP, 0); }


相关文章:
SimpliciTI开发笔记(中文版)
2.参考文献 参考文献(1)SimpliciTI 规范,TI,2007 (2)SimpliciTI 频率捷变应用笔记,2008 (3)SimpliciTI API (4)SimpliciTI 应用安全 (5)SimpliciTI 应用指南 3....
API会徽的授权证书使用译文
SimpliciTI API使用指南... 27页 免费 API会标 2页 1下载券 API会标大纲 10...译​文​,​方​便​有​需​要​的​下​载​使​用...
更多相关标签:
使用指南 翻译 | 微软翻译api 使用 | 如何使用百度翻译api | simpliciti | simpliciti协议 | simpliciti路由协议 | 亚马逊api开发者指南 | restful api 设计指南 |