硬件交互之命令交互

本文探讨了硬件交互中的数据包协议和命令协议,强调了使用字节流进行跨平台通信的重要性。作者解释了如何定义结构体作为协议内容,并展示了如何将命令转换为byte[]用于命令交互。此外,还提到了类型转换的注意事项,包括C/C++的补位行为,并指出字节流传输的兼容性和效率优势。
摘要由CSDN通过智能技术生成

在智能家居公司混了这么久,都没怎么发些有营养的东西,最近感觉不能再这么懒下去了。准备写几篇有关的文章,就当记录下免得忘记了,也方便其他人少走弯路。

本文为楼主原创,转载请表明出处:http://blog.csdn.net/Suma_sun/article/details/51388816

  • 数据包协议(数据收发协议)
  • 命令协议(命令交互)
  • 类型转换

为什么需要数据包协议呢,如果没有对应的协议,你们将无法沟通成功,牛头不对马嘴的在交互,都完全不知道对方说的是什么。
首先硬件嵌入式多是用c/c++开发的所以想要与之交互需要使用它所能读懂的数据结构——结构体。
c/c++和java不同数据类型是不同的,所以通讯的时候要使用通用的数据类型——字节流(byte[])。PS:java、c/c++数据类型各占几个字节就请自行百度吧。

数据包协议
搞清楚了交互的数据类型,就该弄清楚接收到的数据的内容,因为都是以字节来表示,所以你需要知道某个属性或者说是描述的字节长度,否者强行转型也都是乱码(字符串)或错误的值。接下来就来定义一个结构体作为协议的内容。

typedef struct {
 int cmd;//命令标识码
 SMsgContent content;//实际内容
}SMsg

结构体已经给出了,也都有注释不难看出其中意义。cmd是交互命令的唯一标识码,就像Handler的what一样,用于选择对应的解析与操作。

下面给出是cmd的写法


public static final int IOCONTROL_GET_ALL_PARAMS_REQ = 0x03D8;

public static final int IOCONTROL_GET_ALL_PARAMS_RESP = 0x03D9;

命令协议
命令协议就是写在数据包协议里的content的。用作cmd对应的交互用数据,比如该设备是个音响,给其设置声音,那么可能就有音量、低音炮、音频之类的值,把这些命令拆开成几个包分开发送就会增加代码量与交互次数,相应的耗电就提高,业务处理也麻烦。

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值