var ALINK_ID = "12345";
var ALINK_VERSION = "1.1";
var ALINK_PROP_POST_METHOD = 'thing.event.property.post';
// var ALINK_EVENT_TEMPERR_METHOD = 'thing.event.Tem pError.post';
// var ALINK_EVENT_HUMIERR_METHOD = 'thing.event.Hum iError.post';
var ALINK_PROP_SET_METHOD = 'thing.service.property.set';
// var ALINK_SERVICE_THSET_METHOD = 'thing.service.SetTem pHum iThreshold';
/* * * * * *
	* 传入参数 ->
	* 0102 // 共2个字节 * 输出结果 ->
	* {"m ethod":"thing.event.TempError.post","id":"12345","params":{"Tem perature": 2},"version":"1.1"}
	* 传入参数 ->
	* 0202 // 共2个字节 * 输出结果 ->
	* {"m ethod":"thing.event.Hum iError.post","id":"12345","params":{"Hum idity":2}, "version":"1.1"}
*/
/*此函数用于实现设备上发数据到物模型的转换*/
function rawDataToProtocol(bytes) {
	/*将设备上报的RAW数据转换为数组其中bytes对象中存储着设备上报RAW数据*/
	var uint8Array = new Uint8Array(bytes.length);
	for (var i = 0; i < bytes.length; i++) {
		uint8Array[i] = bytes[i] & 0xff;
	}
	var params = {}; // 定义属性存放对象
	var jsonMap = {}; // 定义模拟Alink数据报对象
	/*填写Alink数据报协议头部分*/
	jsonMap['version'] = ALINK_VERSION; // Alink 协议版本号
	jsonMap['id'] = ALINK_ID; // 模拟消息ID
	jsonMap['method'] = ALINK_PROP_POST_METHOD; // 模拟设备上行数据方法->设备属性上报
	/*填写Alink数据报属性部分*/
	params['speed'] = uint8Array[0]; // 将收到的第一个字节转换为转速值
	params['current'] = uint8Array[1]; // 将收到的第二个字节转换为电流
	jsonMap['params'] = params; // 将参数打包到数据帧中
	return jsonMap; // 返回时会发送给IoT设备管理平台
}

/*此函数实现由云端下发数据到设备能识别的16进制数的转换*/
function protocolToRawData(json)
{
	var method = json['method'];
	var id = json['id'];
	var version = json['version'];
	var payloadArray = [];
	if (method == ALINK_PROP_SET_METHOD) // 接收来自IoT设备管理平台的“设置设备属性”的命令
	{
		var send_params = json['params'];
		var prop_cur = send_params['setspeed']; // 将设置的具体值抽取出来
		//按照自定义协议格式拼接 rawdata
		payloadArray = payloadArray.concat(buffer_uint8(0x55)); // 第一字节数据头,标识数据功能用户定义
		payloadArray = payloadArray.concat(buffer_uint8(prop_cur)); // 第二字节,具体的设置值
	}
	return payloadArray; // 返回时,将数据发送至设备端。
}

//以下是部分辅助函数
function buffer_uint8(value)
{
	var uint8Array = new Uint8Array(1);
	var dv = new DataView(uint8Array.buffer, 0);
	dv.setUint8(0, value);
	return [].slice.call(uint8Array);
}
function buffer_int16(value)
{
	var uint8Array = new Uint8Array(2);
	var dv = new DataView(uint8Array.buffer, 0);
	dv.setInt16(0, value);
	return [].slice.call(uint8Array);
}
function buffer_int32(value)
{
	var uint8Array = new Uint8Array(4);
	var dv = new DataView(uint8Array.buffer, 0);
	dv.setInt32(0, value);
	return [].slice.call(uint8Array);
}
function buffer_float32(value)
{
	var uint8Array = new Uint8Array(4);
	var dv = new DataView(uint8Array.buffer, 0);
	dv.setFloat32(0, value);
	return [].slice.call(uint8Array);
}