简体中文

控制协议

Android APIs-控制协议

更新日期:2025/6/9


控制协议

KY_SendIOCtrlToChannel

功能描述:
向设备发送指定Command的数据。需要在KY_Connect 连线成功之后进行调用。设备回复参考 KY_registerSDKListener

接口定义

public abstract void KY_SendIOCtrlToChannel(int channel, int type, byte[] data);

参数说明

参数 类型 说明
channel int 设备连线的channel,默认0
type int command指令值
data array command对应指令的结构体数据

回调说明

暂无

返回码

暂无

代码示例

以下举例说明,在Android项目中,如何将bytes转成一个java对象:

private class People {
	int age = 0;//4 bytes means data[0] ~ data[3]
	long birthday = 1612330883993L;//8 bytes means data[4] ~ data[11]
String name = "";//custom bytes ex: 32 bytes
}
/**
 * byte to people
 *
 * @param data src bytes length & 44
 * @return people
 */
private People byteToPeople(byte[] data) {
	   if (data.length < 44) {
			  return null;
	   }
	   People p = new People();
	   p.age = byteArrayToInt(data, 0);
	   p.birthday = byteArrayToLong(data, 4);
	   byte[] name = new byte[32];
	   System.arraycopy(data, 12, name, 0, 32);
	   p.name = new String(name);
	   return p;
}

private short byteArrayToShort(byte[] bytes, int beginPos) {
	   return (short) ((0xff & bytes[beginPos]) | ((0xff & bytes[beginPos + 1]) << 8));
}

private int byteArrayToInt(byte[] bytes, int beginPos) {
	   return (0xff & bytes[beginPos]) | (0xff & bytes[beginPos + 1]) << 8 | (0xff & bytes[beginPos + 2]) << 16 | (0xff & bytes[beginPos + 3]) << 24;
}

private long byteArrayToLong(byte[] bytes, int beginPos) {
	   long l = 0;
	   for (int i = 0; i < 4; i++) {
			  l = l | ((0xffL & bytes[beginPos + i]) << (8 * i));
	   }
	   return l;
}


协议封装示例

定义协议及结构体

APP发送Command获取灯控开关状态:IOTYPE_GET_LED_REQ = 0x30000001
typedef struct{
	unsigned int channel;       //当前通道号
	unsigned char reserved[4];
}SMsgAVIoctrlGetLedReq;
  
设备端回复灯控开关状态:IOTYPE_GET_LED_RESP = 0x30000002
typedef struct{
	int result;        //0:成功,  其他失败
	unsigned char isOnOff;        // 0:开启; 1:关闭
	unsigned char reserved[3];
}SMsgAVIoctrlGetLedResp;


结构体封装与发送

//在结构体SMsgAVIoctrlGetLedReq中,因为int占4个字节,char占一个字节,所以发送出去的bytes大小为4 + 1*4 = 8
byte[] request = new byte[8];  //将int类型的channel数据转换为byte并复制数据到request数组中
byte[] channelBytes = Packet.intToByteArray_Little(channel);
System.arraycopy(channelBytes, 0, request, 0, 4);  //将封装好的byte[]数据通过api发送给设备
camera.KY_SendIOCtrlToChannel(Camera.DEFAULT_AV_CHANNEL, IOTYPE_GET_LED_REQ, request);


数据接收与解析

camera.KY_registerSDKListener(new InterfaceCtrl.SimpleIRegisterKalaySDKListener() {

	@Override
	public void KY_DidReceiveIOCtrlWithUid(String uid, int channel, int type, byte[] data, int dataSize) {
		if (type == IOTYPE_GET_LED_RESP) {
		//在结构体SMsgAVIoctrlGetLedResp中,因为int占4个字节,char占一个字节,所以接收到的bytes大小为4 + 1 + 1*3 = 8
		//其中,前面4个字节代表设备回复的result信息,第五个字节代表设备回复的isOnOff信息,后面三个字节代表保留位无需解析
			//1、解析result信息
			int result = Packet.byteArrayToInt(data, 0);
		
			//2、解析isOnOff信息
			int isOnOff = (int)data[4];
		}
	}
});

即刻开启您的物联网之旅

联系解决方案专家
Kalay App
解决方案
新闻动态
公司动态
行业资讯
媒体报道
永续发展
经营者的话
社会参与
环境永续
公司治理

+86 755 27702549

7×24小时服务热线

法律声明 隐私权条款

关注“TUTK”

TUTK服务尽在掌握

© 2022 物联智慧科技(深圳)有限公司版权所有粤ICP备14023641号
在线咨询
扫一扫

TUTK服务尽在掌握

全国免费服务热线
+86 755 27702549

返回顶部