收藏官网首页
查看: 20281|回复: 4

透传数据代码示例

跳转到指定楼层
楼主
发表于 2015-11-27 22:48:17 | 只看该作者 |只看大图 回帖奖励 |正序浏览 |阅读模式
校园创客福利
本帖最后由 pomia 于 2015-12-11 18:04 编辑

XPGWifiSDK 透传数据使用方法:

在APP和MCU之间,有两种方式透传数据:
(1)在产品数据点定义时,定义扩展类型数据点
(2)对不定义数据点的产品直接进行数据透传

设备上报:
1、第一种透传方式,设备mcu按照数据点的定义格式上传即可;APP在didReceiveData中,判断result为0(XPGWifiError_NONE),透传数据放在回传参数的“binary”字段中。
2、第二种透传方式,设备mcu在上传的p0中,第一个字节要填充0x06,后跟自定义数据;APP在didReceiveData中,判断result为-48(XPGWifiError_RAW_DATA_TRANSMIT),则回传参数的“binary”字段会返回透传数据。

iOS代码示例:
- (void)XPGWifiDevice: (XPGWifiDevice *)device didReceiveData: (NSDictionary *)recvInfo result: (int)result
{
    if (XPGWifiError_NONE == result || XPGWifiError_RAW_DATA_TRANSMIT == result) {
        if (recvInfo) {
            NSData* binary = [recvInfo valueForKey: @"binary"];
        }

    }
}

Andriod代码示例
public void didReceiveData(XPGWifiDevice device, java.util.concurrent.ConcurrentHashMap<String, Object> dataMap, int result) {
    if (XPGWifiErrorCode.XPGWifiError_NONE == result ||  XPGWifiErrorCode.XPGWifiError_RAW_DATA_TRANSMIT== result) {
        if (dataMap != null && dataMap.get("binary") != null) {
            byte[] binary = (byte[]) dataMap.get("binary");
        }
    }
}

APP下发:
1、第一种透传方式,APP在XPGWifiDevice类的write接口中,按照数据点定义发送扩展数据;
2、第二种透传方式,APP在XPGWifiDevice类的write接口中,发送的json格式为:{"binary": "xxxxxx"};

iOS代码示例:
            char bytes[9] = {1,2,3,4,5,6,7,8,9};
            NSData* data = [NSData dataWithBytes:bytes length:sizeof(bytes)];
            NSString* _data = [XPGWifiBinary encode:data];
            NSMutableDictionary *request = [NSMutableDictionary dictionary];
            [request setValue:_data forKey: @"binary"];
            NSLog(@"try to send binary: %@", data);
            [self.device write:request];


Android 代码示例:
            byte []input = {1,2,3,4,5,6,7,8,9};
            String value = new String(XPGWifiBinary.encode(input));
            final JSONObject jsonsend = new JSONObject();
            jsonsend.put("binary", value);
            xpgWifiDevice.write(jsonsend.toString());


1

主题

4

帖子

21

积分

新手上路

Rank: 1

积分
21
5#
发表于 2016-4-14 13:32:32 | 只看该作者
设备接收gizwits_cloud_receive(const unsigned char *pdata, unsigned short length),收不到binary的信息,也就是APK发送后binary,gizwits_cloud_receive没有被调用过。
我采用esp8266,没有用MCU,但获取设备状态和设置设备都正常。
请问楼主,可能是什么原因?
非常感谢
地板
 楼主| 发表于 2015-12-8 23:07:11 | 只看该作者
05、06是指action。
发送透传数据时,格式不是"cmd", 5。上面的代码示例已经写的很明确: jsonsend.put("binary", value);

字段名必须是binary,value为你要透传的数据内容。

3

主题

5

帖子

69

积分

注册会员

Rank: 2

积分
69
板凳
发表于 2015-12-7 10:12:56 | 只看该作者
本帖最后由 ghost 于 2015-12-8 15:09 编辑

上面说的 0x05和0x06子命令是不是指的就是P0命令中的action呢?
app中改为jsonsend.put("cmd", 5);命令发不出去!

捕获.JPG (30.05 KB, 下载次数: 671)

P0数据

P0数据
沙发
 楼主| 发表于 2015-12-5 23:15:37 | 只看该作者
注册成为机智云开发者,手机加虚拟设备快速开发
本帖最后由 pomia 于 2015-12-11 16:50 编辑

更正:
mcu在上传透传数据时,p0第一个字节填充0x06子命令,不是0xfe。
app在下发透传数据时,用json格式,binary字段填充透传数据,SDK内部会自动把p0的第一个字节填充为0x05。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

加入Q群 返回顶部

版权与免责声明 © 2006-2024 Gizwits IoT Technology Co., Ltd. ( 粤ICP备11090211号 )

快速回复 返回顶部 返回列表