在EmberZNet中创建自定义CLI命令
在Zigbee项目中,您可以找到许多可用于调试的预构建CLI命令。对于每个工程师来说,开发产品都很方便。如果在控制台上键入“ help”,则可以找到以下CLI命令,包括但不限于:
bsend
changekey
debugprint
echo
endpoint
events
help
info
interpan
keys
libs
network
option
plugin
print
raw
read
reset
security
send
send-using-multicast-binding
send_multicast
timesync
version
write
zcl
zdo
安装堆栈后,您可以在以下文档中找到每个CLI命令的详细信息/描述。使用您的浏览器打开与此类似的Simplicity Studio相关的相对路径。
C:/SiliconLabs/SimplicityStudio/v4/developer/sdks/gecko_sdk_suite/v2.1/protocol/zigbee_6.1/documentation/120-3023-000_AF_V2_API/group__cli.html
但是对于某些客户,他们希望自定义其自定义CLI命令以实现某些特殊功能,例如控制外围设备或向其他设备发送一些特殊命令。在这种情况下,如何基于当前的CLI体系结构创建自定义CLI命令?
答案很简单。通过以下步骤扩展自定义CLI命令非常容易:
- 在{project}.isc的“Printing and CLI”选项卡中启用“Add Custom CLI Sub-menu”复选框。
- 然后,您应该在{project} _callback.c文件中实现emberAfCustomCommands []。XncpLedHost_callback.c中有一个很好的示例,请参考XncpLedHost示例。关键是要实现emberAfCustomCommands []中的功能。详细信息如下:
EmberCommandEntry emberAfCustomCommands[] = {emberCommandEntryAction("get-led",getLedCommand,"","Get the state of an LED on the NCP."),emberCommandEntryAction("set-led",setLedCommand,"u","Set the state of an LED on the NCP using a custom LED protocol command."),emberCommandEntryAction("get-frequency",getFrequencyCommand,"","Get the current frequency of the LED strobe on the NCP."),emberCommandEntryAction("set-frequency",setFrequencyCommand,"w","Set the frequency of the LED strobe on the NCP."),emberCommandEntryAction("get-info",getInfoCommand,"","Display the XNCP information on the CLI."),emberCommandEntryTerminator()
};
之后,编译项目并将固件下载到您的硬件,启动控制台,然后在键入“help”后看到“custom” CLI命令。这就是创建自定义CLI命令的所有步骤。如有其他问题,请随时与我们联系。
输入的类型及其字符表示形式:
对于普通(非嵌套)命令,argumentTypes是一个字符串,用于指定命令接受的参数的数量和类型。参数说明符为:
u:一字节无符号整数。
v:两字节无符号整数
w:四字节无符号整数
s:一字节有符号整数
r:两字节有符号整数
q:四字节有符号整数
b:字符串。可以使用引号将参数输入为ascii,例如:“ foo”。也可以使用花括号将其以十六进制形式输入,例如:{08 A1 f2}。十六进制数字必须为偶数,并且空格将被忽略。
*:零个或多个先前的类型。如果使用,则必须是最后一个说明符。
?:未知数量的参数。如果使用,则必须是唯一字符。这意味着该命令解释器将不执行任何参数验证,而是直接调用该操作,并相信它将使用传入的任何参数进行处理。
!:可选参数定界符。
如果命令输入具有足够的参数,使得解析器以!结尾。符号,则即使该命令不一定处理整个argumentsTypes字符串,也将被视为有效。如果除!之外还有其他参数,但仍比下一参数少!或字符串的末尾,则该命令将被视为无效。
请注意,这使调用的CommandAction函数可以实际验证其实际获得的可选参数数量。
示例:给定argumentsTypes字符串:uu!vv!u!vv
以下输入类型顺序有效:
uu,uuvv,uuvvu,uuvvuvv
以下无效:
u,uuv,uuvvuv,uuvvuvvv
整数参数可以是十进制或十六进制。
0x前缀表示十六进制整数。示例:0x3ed。
如果是嵌套命令(操作为NULL),则此字段包含指向嵌套EmberCommandEntry数组的指针。
接受函数中的CLI参数
可以根据输入的类型将参数与CLI调用一起传递。这些参数是通过以下相关函数调用捕获的:
1. uint32_t emberUnsignedCommandArgument(uint8_t argNum)2. int32_t emberSignedCommandArgument(uint8_t argNum)3. uint8_t *emberStringCommandArgument(int8_t argNum, uint8_t *length)4. For special data types such as EUI64 address if a devuce, use emberCopyBigEndianEui64Argument(int8_t index, EmberEUI64 destination)5. To copy string arguments, uint8_t emberCopyStringArgument(int8_t argNum,uint8_t *destination,uint8_t maxLength,bool leftPad)Example: uint8_t enable = (uint8_t)emberSignedCommandArgument(0);
在EmberZNet中创建自定义CLI命令相关推荐
- 为你的AliOS Things应用增加自定义cli命令
在日常嵌入式开发中,我们经常会用串口命令来使设备进入某种特定的状态,或执行某个特定的操作.如系统自检,模拟运行,或者进入手动模式进行设备点动.linux下有强大的shell工具,可以让用户和片上系统进 ...
- hive 元数据 自定义_如何在Hive中创建自定义函数UDF及如何直接通过Impala的同步元数据重用UDF的jar文件-阿里云开发者社区...
如何在Hive中创建自定义函数UDF及使用 如何在Impala中使用Hive的自定义函数 UDF函数开发 使用Intellij工具开发Hive的UDF函数,进行编译: 1.使用Intellij工具通过 ...
- tasker 语音配置文件_如何使用Android和Tasker为Alexa和Google Home创建自定义语音命令...
tasker 语音配置文件 Tasker is one of the most powerful automation tools on Android. Plugins like AutoVoice ...
- 微软word开机自启动_如何在Microsoft Word中创建自定义封面
微软word开机自启动 A great cover page draws in readers. If you use Microsoft Word, you're in luck, because ...
- 在Fritzing中创建自定义元件
topic 参考地址: 第1步:收集所有信息 图1. 数据表中的元件尺寸 图2. ML8511分线板 图3. 所需尺寸 第2步:面包板视图 图4. 主窗口 图5. 文件属性窗口 图6. 新矩形 图8. ...
- 在Fritzing中创建自定义元件(最终修改)
topic 在Fritzing中创建自定义元件 **软件** **第1步:收集所有信息** **第2步:面包板视图** **第3步:原理图视图** **第4步:PCB视图** **第5步:创建Frit ...
- 如何在android中创建自定义对话框?
本文翻译自:How to create a Custom Dialog box in android? I want to create a custom dialog box like below ...
- 在linux系统中创建文件夹,Linux系统中创建文件夹命令详解
Linux系统中创建一个新的文件夹我们可以使用命令来执行,下面由学习啦小编为大家整理了Linux系统中创建文件夹命令详解,希望对大家有帮助! Linux系统中创建文件夹命令详解 一.mkdir命令使用 ...
- NI Multisim元件库:在Multisim中创建自定义元器件
转载于: http://www.ni.com/tutorial/3173/zhs/ 概览 「在Multisim中创建自定义元器件」与「在 NI Ultiboard中创建自定义元器件」为您提供了关于如何 ...
最新文章
- Tensorflow 源码安装成功,导入报错 ImportError: cannot import name 'build_info'
- centos7 安装kubernetes1.4(kubeadm版)
- 【渝粤题库】陕西师范大学200701 数字逻辑
- cross-domain policy file
- 将SQL-SERVER逆向工程导入Power-Design中并给表的字段添加注释
- [COURSE_PTHE] 18. 缓冲区溢出
- Struts2框架基础篇
- PHP博客导入导出,Thinkphp5.0导入导出详解
- [转]NVIDIA/ATI显卡后缀命名大盘点
- spring boot 动态代理
- 十三年来,淘宝走过的大数据之路
- 《红色警戒3》简体中文完美整合版下载
- Auto.js Pro安卓免ROOT引流脚本开发系列教程27网易公开课(5)-UI界面构建
- 四川省天府新区知识产权信息公共服务网点申报好处条件材料
- linux驱动21:内核创建类class_create
- java 黑马头条 day4 自媒体文章发布 自媒体文章列表查询 频道列表展示 自媒体文章-发布、修改、保存草稿 自媒体文章-根据id查询 自媒体文章-删除
- 新品发布会直播推广的优势
- FTP客户端设计与实现
- 128、H3C交换机恢复出厂和各种基本配置
- 详细讲解Python遍历目录的文件夹(dir)、文件(file)的三种方法:os.listdir、os.walk和os.scandir