透传数据代码示例
本帖最后由 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 = ; }
}}
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 = {1,2,3,4,5,6,7,8,9};
NSData* data = ;
NSString* _data = ;
NSMutableDictionary *request = ;
;
NSLog(@"try to send binary: %@", data);
;
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());
本帖最后由 pomia 于 2015-12-11 16:50 编辑
更正:
mcu在上传透传数据时,p0第一个字节填充0x06子命令,不是0xfe。
app在下发透传数据时,用json格式,binary字段填充透传数据,SDK内部会自动把p0的第一个字节填充为0x05。 本帖最后由 ghost 于 2015-12-8 15:09 编辑
上面说的 0x05和0x06子命令是不是指的就是P0命令中的action呢?
app中改为jsonsend.put("cmd", 5);命令发不出去!
05、06是指action。
发送透传数据时,格式不是"cmd", 5。上面的代码示例已经写的很明确: jsonsend.put("binary", value);
字段名必须是binary,value为你要透传的数据内容。 设备接收gizwits_cloud_receive(const unsigned char *pdata, unsigned short length),收不到binary的信息,也就是APK发送后binary,gizwits_cloud_receive没有被调用过。
我采用esp8266,没有用MCU,但获取设备状态和设置设备都正常。
请问楼主,可能是什么原因?
非常感谢
页:
[1]