在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命令相关推荐

  1. 为你的AliOS Things应用增加自定义cli命令

    在日常嵌入式开发中,我们经常会用串口命令来使设备进入某种特定的状态,或执行某个特定的操作.如系统自检,模拟运行,或者进入手动模式进行设备点动.linux下有强大的shell工具,可以让用户和片上系统进 ...

  2. hive 元数据 自定义_如何在Hive中创建自定义函数UDF及如何直接通过Impala的同步元数据重用UDF的jar文件-阿里云开发者社区...

    如何在Hive中创建自定义函数UDF及使用 如何在Impala中使用Hive的自定义函数 UDF函数开发 使用Intellij工具开发Hive的UDF函数,进行编译: 1.使用Intellij工具通过 ...

  3. tasker 语音配置文件_如何使用Android和Tasker为Alexa和Google Home创建自定义语音命令...

    tasker 语音配置文件 Tasker is one of the most powerful automation tools on Android. Plugins like AutoVoice ...

  4. 微软word开机自启动_如何在Microsoft Word中创建自定义封面

    微软word开机自启动 A great cover page draws in readers. If you use Microsoft Word, you're in luck, because ...

  5. 在Fritzing中创建自定义元件

    topic 参考地址: 第1步:收集所有信息 图1. 数据表中的元件尺寸 图2. ML8511分线板 图3. 所需尺寸 第2步:面包板视图 图4. 主窗口 图5. 文件属性窗口 图6. 新矩形 图8. ...

  6. 在Fritzing中创建自定义元件(最终修改)

    topic 在Fritzing中创建自定义元件 **软件** **第1步:收集所有信息** **第2步:面包板视图** **第3步:原理图视图** **第4步:PCB视图** **第5步:创建Frit ...

  7. 如何在android中创建自定义对话框?

    本文翻译自:How to create a Custom Dialog box in android? I want to create a custom dialog box like below ...

  8. 在linux系统中创建文件夹,Linux系统中创建文件夹命令详解

    Linux系统中创建一个新的文件夹我们可以使用命令来执行,下面由学习啦小编为大家整理了Linux系统中创建文件夹命令详解,希望对大家有帮助! Linux系统中创建文件夹命令详解 一.mkdir命令使用 ...

  9. NI Multisim元件库:在Multisim中创建自定义元器件

    转载于: http://www.ni.com/tutorial/3173/zhs/ 概览 「在Multisim中创建自定义元器件」与「在 NI Ultiboard中创建自定义元器件」为您提供了关于如何 ...

最新文章

  1. Tensorflow 源码安装成功,导入报错 ImportError: cannot import name 'build_info'
  2. centos7 安装kubernetes1.4(kubeadm版)
  3. 【渝粤题库】陕西师范大学200701 数字逻辑
  4. cross-domain policy file
  5. 将SQL-SERVER逆向工程导入Power-Design中并给表的字段添加注释
  6. [COURSE_PTHE] 18. 缓冲区溢出
  7. Struts2框架基础篇
  8. PHP博客导入导出,Thinkphp5.0导入导出详解
  9. [转]NVIDIA/ATI显卡后缀命名大盘点
  10. spring boot 动态代理
  11. 十三年来,淘宝走过的大数据之路
  12. 《红色警戒3》简体中文完美整合版下载
  13. Auto.js Pro安卓免ROOT引流脚本开发系列教程27网易公开课(5)-UI界面构建
  14. 四川省天府新区知识产权信息公共服务网点申报好处条件材料
  15. linux驱动21:内核创建类class_create
  16. java 黑马头条 day4 自媒体文章发布 自媒体文章列表查询 频道列表展示 自媒体文章-发布、修改、保存草稿 自媒体文章-根据id查询 自媒体文章-删除
  17. 新品发布会直播推广的优势
  18. FTP客户端设计与实现
  19. 128、H3C交换机恢复出厂和各种基本配置
  20. 详细讲解Python遍历目录的文件夹(dir)、文件(file)的三种方法:os.listdir、os.walk和os.scandir

热门文章

  1. 浅析阿里云网络-SLB负载均衡
  2. 已解决苹果MacOS系统安装使用Python和pip工具安装第三方模块
  3. 【原创】基于SSM框架的家装网站分析与设计
  4. 11.定时任务定时线程池详解
  5. ubuntu的Files资源管理器打不开解决方案
  6. Git安装配置与使用(超级详细)
  7. ceph iscsi
  8. 实现Log4j和Logback的统一日志封装与动态日志级别调整
  9. cqrs java_Java的CQRS和事件溯源ES入门:如何从CRUD切换到CQRS/ES - Baeldung
  10. 跟我学aspectj之六 ----- 插曲