简体中文

控制协议

Android APIs-控制协议

更新日期:2025/5/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

返回顶部