《SimpliciTI API使用指南英文翻译.docx》由会员分享,可在线阅读,更多相关《SimpliciTI API使用指南英文翻译.docx(27页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、SimpliciTI应用程序接口文档编号: SWRA221美国加利福尼亚州圣迭哥德州仪器有限公司版本号说明日期1.0最初版本2008/08/011.1更新到1.1.0版本2009/01/141.2最新的修改记录2009/03/241 绪论1.1 目的本文档描述了SimpliciTI软件的应用程序接口。应用程序接口给SimpliciTI协议栈工作提供了一个接口。1.2 参考书目1 SimpliciTI1.1.0版本说明书。2 SimpliciTI开发者注意事项。1.3 字体使用一些专用的字体:字体用法常规字体用于文件名、代码段、符号和代码示例。带下划线的蓝色正文文件交叉引用链接1.4 缩略语和定
2、义API 应用程序编程接口。BSP 板级支持包CCA 清除信道评估GPIO 通用输入输出ISR 中断服务例程LED 发光二极管LQI 链接情况指示LRU 最近应用MAC 介质访问控制。PHY 物理层。RSSI 接收信号强度指示器2 应用程序接口概述2.1 接口机制下面的接口机制应用于SimpliciTI的应用程序接口。 2.1.1 直接执行函数调用这些应用程序接口函数直接执行代码进行工作,函数在执行时联系前后调用,这些函数可能有鉴定识别的部分。2.1.2 回调函数在SimpliciTI协议中又一次随意回调的机会,这样的函数必须在应用中定义和执行,并且在初始化时要声明。在运行中断程序时,函数回调
3、的实现应避免CPU强制操作,这一函数将在第7部分做详细的描述。2.2 数据接口这些接口支持SimpliciTI协议栈和应用程序之间的发送和接收数据,并最终支持点对点通讯。2.3 普通常量和结构体2.3.1 公共数据类型下面定义:typedefsigned char int8_t;typedefsigned short int16_t;typedefsigned long int32_t;typedefunsigned char uint8_t;typedefunsigned short uint16_t;typedefunsigned long uint32_t;typedefunsigned
4、 char linkID_t;typedefenum smplStatus smplStatus_t;另外一些类型和结构体用于IOCTL接口,这些将在第6部分中详细说明。2.3.2 状态下列状态值用于各种API函数。这些都是Status_t类型的值。每个API象征的相应的返回代码将会在后续章节中详细说明。名称描述SMPL_SUCCESS操作成功SMPL_TIMEOUT同步调用超时SMPL_BAD_PARAM在调用错误的参数值SMPL_NOMEM无可用内存。依赖于对象的APISMPL_NO_FRAME在输入帧队列中没有可用帧SMPL_NO_LINK没有收到答复的链接帧发送SMPL_NO_JOIN
5、没有收到答复加入帧发送SMPL_NO_CHANNEL频道扫描没有1个通道响应SMPL_NO_PEER_UNLINK同行无法删除连接。在答复信息返回到中断请求(不正式支持)SMPL_TX_CCA_FAIL帧传输失败,因为清除信道评估失败SMPL_NO_PAYLOAD收到帧但没有得到有效载荷应用SMPL_NO_AP_ADDRESS我们没有收到一个接入点的地址2.3.3 专用链接标识SimpliciTI协议支持由应用程序默认的专用链接标识,下面的值表示的专用链接标识。名称描述SMPL_LINKID_USER_UUD未连接的用户数据链路标识。这是一个专用的,无连接链路的编号,它默认被所有用户应用程序所
6、支持。3 初始化接口3.1 简介SimpliciTI初始化涉及三个初始化阶段:板级、无线和堆栈初始化,并特意把板级初始化(BSP)与无线和堆栈初始化分开:无线和堆栈的初始化作为SimpliciTI初始化调用的结果同时发生;板级初始化可以单独地调用。我们可以不考虑SimpliciTI API部分,但还是要注意到初始化的完整性。把板级的初始化分离开来,这样做是为了客户可以使用自己的目标设备的BSP。使板级的初始化明确与SimpliciTI初始化分开,可以更容易地移植到另一个目标设备。3.1.1 板级初始化SimpliciTI支持最小板级特定的板级初始化,板级初始化包括LED的GPIO引脚配置、开关
7、配置和一个服务协议事务的计数器/定时器,它还包括双核射频设计需要的SPI初始化。3.1.2 无线初始化无线寄存器的改写和无线模块的设置都发生在供电、空闲状态。大部分无线寄存器都是基于SmartRF Studio输出代码,并且默认的通道设置在频道表的第一项。3.1.3 堆栈初始化 初始化所有的数据结构和网络应用程序,此外,该堆栈产生一个代表该设备的加入请求,在没有中心处理节点的拓扑结构中加入请求将失败,这是提前在拓扑结构中设置的,而不是一种错误情况。这种技术在有中心处理节点时,连接失败是一种错误,在应用程序中就应该尝试重新加入或者是采取其它措施。3.2 BSP_Init()3.2.1 函数说明它
8、虽然不严格属于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指针的功能,可以对应
9、一个linkID_t参数返回一个uint8_t参数非空的声明回事的被调用的函数成为回调函数并被注册。由于该函数只被调用一次,该回调函数服务与平台上的所有逻辑终端设备。3.3.4 返回值可能的状态如下:状况描述SMPL_SUCCESS初始化成功SMPL_NO_JOIN没有连接回应,可能是没有中心处理节点,在拓扑中无中心处理节点时不是错误。SMPL_NO_CHANNEL1、只有当频率变换时;2、如果没有AP;3、频率通道扫描会失败。4 连接接口4.1 简介此接口提供了建立两个对等节点之间连接的机制。4.2 SMPL_Link()4.2.1 函数说明这个函数的调用发送了一个广播连接帧后等待应答,一接
10、到应答,两节点之间的连接就被建立,一个链接ID作为应用层对连接的处理结果被指定使用。这个调用等待一个应答,如果在一定时间内没有接收到应答也会返回,所以他不是一个严格的模块化调用,等待时间的缩放是基于帧的长度和数据传输速度并且在自动初始化过程中确定。这个函数可以多次调用来建立多个逻辑连接,在同级节点中可能连接相同或不同的设备。4.2.2 函数原型smplStatus_t SMPL_Link(linkID_t *lid)4.2.3 详细参数参数描述lid这个参数是一个指向Link ID指针,如果调用成功,指针指向的变量将有效,并将在随后的具体节点应用程序接口中使用,用来指向特定的设备。4.2.4
11、函数返回可能的状况如下:状况描述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
12、_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在侦听时间内没有接收到
13、连接,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用来发送信息目标节点的
14、连接IDmsg消息指针寄存器。len消息的长度。这可以是0。在没有应用情况下发送消息负载是合法的。opts被选择的有效传输选项的位图。lid 参数必须在先前一个成功链接时确定,除了未连接用户自带寻址信息的LINK ID(参见2.3.3节),这个link ID 总是有效。由于这种连接不是基于连接的,使用这一ID的信息可以作为有效的数据表发送到所有应用节点。有效的传输选项是: 选项描述SMPL_TXOPTION_NONE 没有选择。 No options selected.SMPL_TXOPTION_ACKREQ 来自目标节点的请求确认。同步调用。5.2.4 返回值状况描述SMPL_SUCCESS
15、传送成功。SMPL_BAD_PARAM无效的入口连接ID;入口连接数据不合适;无消息或者消息太长。SMPL_NOMEM输出数据针队列没有空间。SMPL_TX_CCA_FAIL通信配置失败,发送数据不成功。SMPL_NO_ACK未接收到确认。5.3 SMPL_Send()5.3.1 函数说明这个函数是把应用数据发送到一个节点。除了传送选择项,应用编程接口和SimpliciTI早期的版本保持一致。这个应用编程接口相当于以指定的SMPL_TXOPTION_NONE参数调用SMPL_SendOpt()。该网络的代码需要适当地为无线服务做调整,在完成调用之前无线将处于同一状态,应用将一直不做任何处理直到
16、无线达到一定要求。默认情况下,一直试图强制发送CCA。5.3.2 函数原型smplStatus_t SMPL_Send(linkID_t lid, uint8_t *msg, uint8_t len)5.3.3 详细参数参数描述lid目标节点的连接ID。msg指向消息存储空间的指针。len消息的长度。这可以是0。在没有应用情况下发送消息负载是合法的。用负荷负载是合法的。 lid 参数必须在先前一个成功链接时确定,除了未连接用户自带寻址信息的LINK ID(参见2.3.3节),这个link ID 总是有效。由于这种连接不是基于连接的,使用这一ID的信息可以作为有效的数据表发送到所有应用节点。5.
17、3.4 函数返回值可能的状况如下:状况描述SMPL_SUCCESS传输成功。SMPL_BAD_PARAM没有有效的链接入口的ID;链接入口数据不合适; 没有信息或者是信息太长。SMPL_NOMEM输出数据针对列没有空间。SMPL_TX_CCA_FAIL通信配置失败,未能发送消息。5.4 SMPL_Receive()5.4.1 函数说明这个函数的功能就是核对从任何节点收到的数据帧数组。除非设备是轮流检测设备,否则他将不会激活无线或者不会将无线的状态转换为接收模式,他所做的只是去核对接收到的数据帧是否为指定的连接。如果设备是在配置文件中指定了的设备(参见the Developers Notes中的
18、9.2节),网络层将要使能无线发送轮流检测的申请,并接受应答。在这种情况下,调整无线模块将不再是应用层的任务。如果指定的节点有不只一个可用的数据帧,它们将遵循先进先出原则进行被返回,从而,需要多个调用来找回多个帧。5.4.2 函数原型smplStatus_t SMPL_Receive(linkID_t lid, uint8_t *msg, uint8_t *len)5.4.3 详细参数参数说明lid用这个连接ID说明信息是从那个节点来msg消息指针,指向装有接到的信息寄存器len只想装有接收到的信息长度的寄存器lid 参数必须在先前一个成功链接时确定,除了未连接用户自带寻址信息的LINK ID
19、(参见2.3.3节),这个link ID 总是有效。应用程序必须保证接收寄存器足够的大以用来接收消息。为了防止接收寄存器溢出,最好的策略就是提供一个和最大负载同样大小的缓存器,就像在网络层定义的数据结构时的MAX_APP_PAYLOAD一样大。5.4.4 函数返回值可能的状态如下:状态说明SMPL_SUCCESS取得连接ID,“ msg”and “len ”有效。SMPL_BAD_PARAM没有有效的连接入口ID; 链接入口的数据不合适。SMPL_NO_FRAME没有可用的数据帧SMPL_NO_PAYLOAD接收到的数据真没有有效负荷负载, 不是一个严格错误,由于返回值是0,在应用程序中可以一
20、推算出有效负荷负载。SMPL_TIMEOUT轮流检测的设备:没有收到来自AP的应答。SMPL_NO_AP_ADDRESS轮流检测的设备:不知道AP 的地址。SMPL_TX_CCA_FAIL轮流检测的设备:不能按要求向AP发送数据SMPL_NOMEM轮流检测的设备:在输出数据帧数组里没有存储空间SMPL_NO_CHANNEL轮流检测的设备:频率变更使能, 并且不能找到转换通道。6 设备管理:IOCTL接口6.1 简介ioctl接口使应用程序能更精确的控制设备。这种指定了对象、行为、和任何与该对象和行为有关的接口有种一般形式。接口有足够大的应用范围,所以各种形式的控制都可以根据自己的情况基于一般形
21、式接口进行描述。因为接口层是很的通用,所以用户可以很容易的扩展应用。6.2 通用常量和结构下面将描述ioctl的对象和行为,随调用提供的参数信息因对象不同而各有差异。详细参数结构说明将在接口描述后的章节中进行,每个接口将单独描述。6.2.1 IOCTL的对象下面是定义的对象会在API概述后的独立章节中进行讨论。enum ioctlObjectIOCTL_OBJ_FREQ, IOCTL_OBJ_CRYPTKEY,IOCTL_OBJ_RAW_IO, IOCTL_OBJ_RADIO,IOCTL_OBJ_AP_JOIN, IOCTL_OBJ_ADDR, IOCTL_OBJ_CONNOBJ,IOCTL_
22、OBJ_FWVER, IOCTL_OBJ_PROTOVER,IOCTL_OBJ_NVOBJ, IOCTL_OBJ_TOKEN;typedef enum ioctlobjectioctl object_t;6.2.2 IOCTL的作用下面定义的动作将在API概述之后的相关章节中进行讨论。Enum ioctlActionIOCTL_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
23、_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 ioctlActionioctlAction_t;6.3 SMPL_Ioctl()6.3.1 函数说明所有IOCTL调用采用的单一格式。6.3.2 函数原型smplStatus_t SMPL_Ioctl(ioctlObject_t obj, ioctlAction_t act, voi
24、d *val)6.3.3 详细参数参数说明obj发生动作的对象。act指定对象要发生的动作。val参数信息的指针。因动作不同可能是输入或输出动作。如果对象/动作组合不需要参数信息,也可为空值NULL。所有调用val的情况应该有所参考,比如,一个真实的指针。不要向无类型的val赋值。内部代码获取变量的值,好像它是一个到对象的指针,这对单个变量来说确实不方便,但却具有使接口前后一致的好处。6.3.4 函数返回值状态说明SMPL_SUCCESS操作成功SMPL_BAD_PARAMioctl 对象或者 ioctl 行为不合法。额外返回值取决于指定对象。这些值将被描述在后续章节。6.4 IOCTL的对象
25、/行动接口说明6.4.1 初始I / O6.4.1.1支持结构体定义下面的结构体支持该对象:typedef structuint8_t addrNET_ADDR_SIZE; addr_t;typedef structaddr_t *addr; uint8_t *msg; uint8_t len; uint8_t port; ioctlRawSend_t;typedef structaddr_t *addr; uint8_t *msg; uint8_tlen; uint8_tport; uint8_thopCount; ioctlRawReceive_t;6.4.1.2接口详细说明这个对象允许发
26、送和接收来自任意目标地址/端口组合。通常应用程序必须使用连接计划建立对等连接。这个对象允许无条件通信。这种支持在NWK层本身被广泛使用。请注意,该接口需要调用者提供一个完整的应用地址(设备地址和端口号),而不是一个从应用程序运行的链接ID。目标作用数据类型注释IOCTL_OBJ_RAW_IOIOCTL_ACT_READioctlRawReceive_t被执行时返回指定端口上的最早的帧载荷。除了附加信息,和SMPL_Receive() 调用是一样的。IOCTL_ACT_WRITEioctlRawSend_t发送封装载荷到指定地址/端口组合6.4.1.3 函数返回值6.4.1.3.1 IOCTL_
27、ACT_WRITE可能的状态情况如下:STATUSDESCRIPTIONSMPL_SUCCESS 传送成功SMPL_NOMEM 输出帧数组中没有空间SMPL_TX_CCA_FAIL CCA失败6.4.1.3.2 IOCTL_ACT_READ可能的状态情况如下:状态说明SMPL_SUCCESS发现数据帧端口号,“msg”和“len”内容有效。SMPL_NO_FRAME没有可用的数据帧。6.4.2 无线管理一些简单的无线控制的功能目前已经上市。在这个时候接口不支持直接访问无线配置寄存器。6.4.2.1 支持结构体定义typedef int8_t rssi_t;typedef structrssi_
28、t rssi;uint8_t lqi; rxMetrics_t;typedef structlinkID_tlid;/* input: port for which signal info desired */rxMetrics_tsigInfo; ioctlRadioSiginfo_t;enum ioctlLevelIOCTL_LEVEL_0, IOCTL_LEVEL_1, IOCTL_LEVEL_2;typedef enum ioctlLevel ioctlLevel_t;6.4.2.2接口详细说明目标对象操作数据类型注释IOCTL_OBJ_RADIOIOCTL_ACT_RADIO_SLE
29、EPNULL在MCU休眠前操作,切换无线状态,必须保存无线寄存器 IOCTL_ACT_RADIO_AWAKENULL在MCU唤醒前操作,必须恢复所有无线寄存器IOCTL_ACT_RADIO_SIGINFOioctlRadioSiginfo_t在指定端口获取前一帧的信号强度信息IOCTL_ACT_RADIO_RSSIrssi_t获得当前RSSI值IOCTL_ACT_RADIO_RXONNULL把无线置于接收状态IOCTL_ACT_RADIO_RXIDLENULL把无线模块置于空闲状态,节省能量IOCTL_ACT_RADIO_SETPWR*ioctlLevel_t设置输出能量级(和EXTENDED
30、_API一起使用来建立时间宏定义)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 请求状态如下:状态说明SMPL_SUCCESS
31、 指定的能量层次有效并被设定SMPL_BAD_PARAM 指定的能量层次无效6.4.3 数据节点加入管理为了增加对设备接入SimpliciTI网络的能力的控制,协议使用令牌来加入网络或者建立等对等点。附加的控制提供允许AP拒绝处理加入请求帧,除非在前后被设置成是允许这一处理。目的是,如果设备不能加入网络,就得不到该网络的连接令牌,因此无法和其它任何设备相连接。6.4.3.1 接口详细说明目标对象操作数据类型注释IOCTL_OBJ_AP_JOIN IOCTL_ACT_ON NULL 允许加入处理IOCTL_ACT_OFF NULL 忽略加入处理6.4.3.2 返回值 状态说明SMPL_SUCCE
32、SS 这个调用总是会成功的6.4.4 设备地址分配这个应用接口允许应用程序撤销构建时设备对地址的设。如果应用程序运行时产生了设备地址,该接口就被用来设置这一地址。设备地址设定必须在SMPL_Init()前进行,否则构建时地址会被使用。一旦这个地址分配在任一情况下(预初始化ioctlcall或者通过SMPL_Init())被设置了就不能再修改。6.4.4.1 支持结构体定义typedef structuint8_t addr NET_ADDR_SIZE; addr_t;6.4.4.2 接口详细说明目标对象操作数据类型注释IOCTL_OBJ_ADDRIOCTL_ACT_SETaddr_t设置数据指
33、针地址IOCTL_ACT_GETaddr_t从指定地址返回地址信息6.4.4.3 返回值状态说明SMPL_SUCCESS 这个调用总是会成功的6.4.5 频率管理通过这个接口,可以设置或者获得当前逻辑通道。也可以进行扫描。 这个接口网络层支持支持跳频时被使用。6.4.5.1 结构体定义typedef struct uint8_t logicalChan; freqEntry_t; typedef struct uint8_t numChan; freqEntry_t *freq; ioctlScanChan_t;6.4.5.2 接口详细说明目标对象操作数据类型注释IOCTL_OBJ_FREQI
34、OCTL_ACT_SETfreqEntry_t设定指定数值的逻辑信道IOCTL_ACT_GETfreqEntry_t向指定地址返回逻辑信道IOCTL_ACT_SCANioctlScanChan_t扫描所有信道的回应。回应被接受的信道序号被返回到指定的reqEntry数组6.4.5.3 返回值6.4.5.3.1 IOCTL_ACT_SET 状态说明SMPL_SUCCESS 操作成功SMPL_BAD_PARAM 请求信道序号超出允许范围6.4.5.3.2 IOCTL_ACT_GET 状态说明SMPL_SUCCESS 这个调用总是会成功的6.4.5.3.3 IOCTL_ACT_SCAN 状态说明SM
35、PL_SUCCESS 这个调用总是会成功的,然而信道数在返回的参数结构体中可以是0,这意味着没有会找到信道。调用者应确保检查了信道数目成员。6.4.6 链接管理下列接口运行时移除指定链接ID的链接入口, 并且是在不警示节点的情况下就断开连接。6.4.6.1 接口详细说明 目标对象操作数据类型注释IOCTL_OBJ_CONNOBJIOCTL_ACT_DELETElinkID_t从链接ID指针指定的连接链表中删除本地连接Link ID SMPL_LINKID_USER_UUD 不是一个有效的调用对象。6.4.6.2 返回值状态说明SMPL_SUCCESS 操作成功SMPL_BAD_PARAM LI
36、NK_ID是SMPL_LINK_ID_USER_UUD或者无信息6.4.7 固件版本6.4.7.1 宏定义#define SMPL_FWVERSION_SIZE 46.4.7.2 接口详细说明运行中的固件版本可以被检索。这是一个只读对象。目标对象操作数据类型注释IOCTL_OBJ_FWVER IOCTL_ACT_GET uint8_t 检索一个字节数组作为当前的固件版本。 固件版本是一个 SMPL_FWVERSION_SIZE大小的字节数组,有如下形式:字节注释0 主版本号 1 二级版本号2 维护版本号3 特刊版本号 每个字节中的数值是二进制的数。6.4.7.3 返回值状态说明SMPL_SUC
37、CESS 这个调用总是会成功的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 objVersion; uint16_t objLen; uint8_t *
38、 *objPtr; ioctlNVObj_t; 6.4.9.2 Interface details 目标对象操作数据类型注释IOCTL_OBJ_NVOBJIOCTL_ACT_GETioctlNVObj_t返回版本、长度以及链接文本的指针如果objPtr值为空则只传送版本和长度两个N对象V。注意这个接口提供了一个危险的入口到内存中的链接文本,应用程序必须注意避免扰乱这一部分内存或直接修改文本。6.4.9.3 返回值状态说明SMPL_SUCCESS操作成功SMPL_BAD_PARAM一个动作已被指定,IOCTL_ACT_GET除外6.4.10 Network 通道令牌通过这个接口可以获得加入令牌和
39、链接令牌,扩展API函数建立时间宏定义时会使能这个功能。6.4.10.1支持的定义enum tokenTypeTT_LINK,/*链接令牌*/TT_JOIN /*加入令牌*/;typedef enum tokenType tokenType_t;/* 组合可以使任意令牌转化类型变得简单*/typedef unionuint32_t linkToken;uint32_t joinToken; token_t;typedef structtokenType_ttokenType;token_ttoken; ioctlToken_t6.4.10.2 接口详细信息目标对象操作数据类型 object注释
40、IOCTL_OBJ_TOKENIOCTL_ACT_GETioctlToken_t获取指定的令牌值赋给令牌对象IOCTL_ACT_SETioctlToken_t到指定的令牌目标地址设置令牌值6.4.10.3 返回值状态说明SMPL_SUCCESSSMPL_BAD_PARAM除TT_LINK 、TT_JOIN 之外的令牌或除IOCTL_ACT_GET之外的动作已被指定7 应答接口7.1 简介在初始化的时候,向初始化提供一个函数指针作为调用参数以被注册。这个函数必须由应用程序提供。7.2 回调函数详细说明7.2.1 函数说明当接收到的数据结构里包含一个有效的应用目标地址时,在接收中断服务程序中调用回
41、调函数(如果已经注册)。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,这是由程序员去负责操作。如果
42、函数返回值是0,接收帧就被留在输入帧中以待后用户进程的检索,这是推荐的编程思路。回调函数可以简单的置标志位,要不然就存储等待帧的信息。SMPL_Receive()的实参应该在用户进程中赋值。如果返回值是non-zero,为了立即重新使用,帧资源会被释放。这就意味着应答这个函数已经选取它所要的有效的信息。8 扩展应用接口程序8.1 简介如果EXTENED_API宏被定义在整个工程结构中,扩展的API符号就会被激活。这将在下一节中进行描述。为节省代码空间,这些符号在默认情况下是不启用。如果宏定义了,则所有的符号都包含在内。8.2 SMPL_Unlink() 8.2.1 函数说明这个应用程序接口以常
43、规的方式断开连接。断开连接包含两个动作。首先,本地连接被无条件断开,调用这个函数之后,所有涉及到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 没有发现Link ID。SMPL_TIMEOUT 从目标节点无回应。SMPL_NO_PEER_UNLINK 节点没有指定连接的的连接表入口。8.3 SMPL_Ping() 8.3.1 函数说明这个应用接口程序代替用户应用程序在网络层执行NWK Ping程序。他将Ping与指定节点有关的设备。注意ping的不是节点本身,而是设备所伺服的节点。这大概上和TCP/IP协议的信报控制协议差不多。这给用户提供了