/*!
----------------------------------------------------
TcAdsWebService JavaScript Library
----------------------------------------------------
Version: v1.0.6.0
----------------------------------------------------
Copyright 2018, Beckhoff Automation GmbH & Co. KG
http://www.beckhoff.com
----------------------------------------------------
*/
////////////////////////////////////////////////////
(function (window) {
var TcAdsWebService = new (function () {
this.Response = (function (hasError, error, reader, isBusy) {
this.isBusy = isBusy;
this.hasError = hasError;
this.error = error;
this.reader = reader;
this.getTypeString = (function () {
return "TcAdsWebService.Response";
});
});
this.Error = (function (errorMessage, errorCode) {
this.errorMessage = errorMessage;
this.errorCode = errorCode;
this.getTypeString = (function () {
return "TcAdsWebService.Error";
});
});
this.ResquestError = (function (requestStatus, requestStatusText) {
this.requestStatus = requestStatus;
this.requestStatusText = requestStatusText;
this.getTypeString = (function () {
return "TcAdsWebService.ResquestError";
});
});
this.Client = (function (sServiceUrl, sServiceUser, sServicePassword) {
this.getTypeString = (function () {
return "TcAdsWebService.Client";
});
this.readwrite = (function (sNetId, nPort, nIndexGroup, nIndexOffset, cbRdLen, pwrData, pCallback, userState, ajaxTimeout, ajaxTimeoutCallback, async) {
var message =
"" +
"" +
"" +
"" + sNetId + "" +
"" + nPort + "" +
"" + nIndexGroup + "" +
"" + nIndexOffset + "" +
"" + cbRdLen + "" +
"" + pwrData + "" +
"";
return sendMessage(message, "http://beckhoff.org/action/TcAdsSync.Readwrite", pCallback, userState, ajaxTimeout, ajaxTimeoutCallback, async);
});
this.readState = (function (sNetId, nPort, pCallback, userState, ajaxTimeout, ajaxTimeoutCallback, async) {
var message =
"" +
"" +
"" +
"" + sNetId + "" +
"" + nPort + "" +
"";
return sendMessage(message, "http://beckhoff.org/action/TcAdsSync.ReadState", pCallback, userState, ajaxTimeout, ajaxTimeoutCallback, async);
});
this.writeControl = (function (sNetId, nPort, adsState, deviceState, pData, pCallback, userState, ajaxTimeout, ajaxTimeoutCallback, async) {
var message =
"" +
"" +
"" +
"" + sNetId + "" +
"" + nPort + "" +
"" + adsState + "" +
"" + deviceState + "" +
"" + pData + "" +
"";
return sendMessage(message, "http://beckhoff.org/action/TcAdsSync.WriteControl", pCallback, userState, ajaxTimeout, ajaxTimeoutCallback, async);
});
this.write = (function (sNetId, nPort, nIndexGroup, nIndexOffset, pData, pCallback, userState, ajaxTimeout, ajaxTimeoutCallback, async) {
var message =
"" +
"" +
"" +
"" + sNetId + "" +
"" + nPort + "" +
"" + nIndexGroup + "" +
"" + nIndexOffset + "" +
"" + pData + "" +
"";
return sendMessage(message, "http://beckhoff.org/action/TcAdsSync.Write", pCallback, userState, ajaxTimeout, ajaxTimeoutCallback, async);
});
this.read = (function (sNetId, nPort, nIndexGroup, nIndexOffset, cbLen, pCallback, userState, ajaxTimeout, ajaxTimeoutCallback, async) {
var message =
"" +
"" +
"" +
"" + sNetId + "" +
"" + nPort + "" +
"" + nIndexGroup + "" +
"" + nIndexOffset + "" +
"" + cbLen + "" +
"";
return sendMessage(message, "http://beckhoff.org/action/TcAdsSync.Read", pCallback, userState, ajaxTimeout, ajaxTimeoutCallback, async);
});
var handleSyncResponse = function (xhr) {
var errorMessage = undefined, errorCode = 0;
if (xhr.readyState != 4 || xhr.status != 200) {
// Request has been aborted.
// Maybe because of timeout.
var resp = undefined;
try {
resp = new TcAdsWebService.Response(
true, new TcAdsWebService.ResquestError(xhr.status, xhr.statusText), undefined, false);
} catch (err) {
// Internet Explorer throws exception on abort
resp = new TcAdsWebService.Response(
true, new TcAdsWebService.ResquestError(0, 0), undefined, false);
}
xhr = null;
return resp;
}
var sSoapResponse = xhr.responseXML.documentElement;
var faultstringNodes = sSoapResponse.getElementsByTagName('faultstring');
if (faultstringNodes.length != 0) {
errorMessage = faultstringNodes[0].firstChild.data;
var errorCodeNodes = sSoapResponse.getElementsByTagName('errorcode');
if (errorCodeNodes.length != 0) {
errorCode = sSoapResponse.getElementsByTagName('errorcode')[0].firstChild.data;
} else {
errorCode = "-";
}
var resp = new TcAdsWebService.Response(
true, new TcAdsWebService.Error(errorMessage, errorCode), undefined, false);
xhr = null;
return resp;
} else {
var ppDataNodes = sSoapResponse.getElementsByTagName('ppData');
var ppRdDataNodes = sSoapResponse.getElementsByTagName('ppRdData');
var pAdsStateNodes = sSoapResponse.getElementsByTagName('pAdsState');
var pDeviceStateNodes = sSoapResponse.getElementsByTagName('pDeviceState');
var soapData = "";
if (ppDataNodes.length != 0) {
//read
for (var i = 0; i < ppDataNodes[0].childNodes.length; i++) {
soapData += ppDataNodes[0].childNodes[i].data;
}
} else if (ppRdDataNodes.length != 0) {
// readwrite
for (var i = 0; i < ppRdDataNodes[0].childNodes.length; i++) {
soapData += ppRdDataNodes[0].childNodes[i].data;
}
} else if (pAdsStateNodes.length != 0 && pDeviceStateNodes.length) {
// readState
var adsState = pAdsStateNodes[0].firstChild.data;
var deviceState = pDeviceStateNodes[0].firstChild.data;
var writer = new TcAdsWebService.DataWriter();
writer.writeWORD(parseInt(adsState, 10));
writer.writeWORD(parseInt(deviceState, 10));
soapData = writer.getBase64EncodedData();
}
if (soapData) {
var resp = new TcAdsWebService.Response(
false,
undefined,
new TcAdsWebService.DataReader(soapData), false);
xhr = null;
return resp;
} else {
// write completes without data in response
var resp = new TcAdsWebService.Response(false, undefined, undefined, false);
xhr = null;
return resp;
}
}
}
var handleAsyncResponse = function (readyState, status, statusText, responseXML, pCallback, userState) {
if (readyState < 4) {
if (pCallback) {
var resp = new TcAdsWebService.Response(false, undefined, undefined, true);
pCallback(resp, userState);
}
}
if (readyState == 4) {
if (status == 200) {
var errorMessage = undefined, errorCode = 0;
var sSoapResponse = responseXML.documentElement;
var faultstringNodes = sSoapResponse.getElementsByTagName('faultstring');
if (faultstringNodes.length != 0) {
errorMessage = faultstringNodes[0].firstChild.data;
var errorCodeNodes = sSoapResponse.getElementsByTagName('errorcode');
if (errorCodeNodes.length != 0) {
errorCode = sSoapResponse.getElementsByTagName('errorcode')[0].firstChild.data;
} else {
errorCode = "-";
}
if (pCallback) {
var resp = new TcAdsWebService.Response(
true, new TcAdsWebService.Error(errorMessage, errorCode), undefined, false);
pCallback(resp, userState);
}
} else {
var ppDataNodes = sSoapResponse.getElementsByTagName('ppData');
var ppRdDataNodes = sSoapResponse.getElementsByTagName('ppRdData');
var pAdsStateNodes = sSoapResponse.getElementsByTagName('pAdsState');
var pDeviceStateNodes = sSoapResponse.getElementsByTagName('pDeviceState');
var soapData = "";
if (ppDataNodes.length != 0) {
//read
for (var i = 0; i < ppDataNodes[0].childNodes.length; i++) {
soapData += ppDataNodes[0].childNodes[i].data;
}
} else if (ppRdDataNodes.length != 0) {
// readwrite
for (var i = 0; i < ppRdDataNodes[0].childNodes.length; i++) {
soapData += ppRdDataNodes[0].childNodes[i].data;
}
} else if (pAdsStateNodes.length != 0 && pDeviceStateNodes.length) {
// readState
var adsState = pAdsStateNodes[0].firstChild.data;
var deviceState = pDeviceStateNodes[0].firstChild.data;
var writer = new TcAdsWebService.DataWriter();
writer.writeWORD(parseInt(adsState, 10));
writer.writeWORD(parseInt(deviceState, 10));
soapData = writer.getBase64EncodedData();
}
if (soapData) {
if (pCallback) {
var resp = new TcAdsWebService.Response(
false, undefined, new TcAdsWebService.DataReader(soapData), false);
if (pCallback)
pCallback(resp, userState);
}
} else {
// write completes without data in response
if (pCallback) {
var resp = new TcAdsWebService.Response(false, undefined, undefined, false);
pCallback(resp, userState);
}
}
}
} else {
// Request has been aborted.
// Maybe because of timeout.
if (pCallback) {
var resp = undefined;
try {
resp = new TcAdsWebService.Response(
true, new TcAdsWebService.ResquestError(status, statusText), undefined, false);
} catch (err) {
// Internet Explorer throws exception on abort
resp = new TcAdsWebService.Response(
true, new TcAdsWebService.ResquestError(0, 0), undefined, false);
}
pCallback(resp, userState);
}
}
}
}
var sendMessage = function (message, method, pCallback, userState, ajaxTimeout, ajaxTimeoutCallback, async) {
if (async == null || async == undefined)
async = true;
var xhr = undefined;
if (window.XMLHttpRequest) {
xhr = new XMLHttpRequest();
} else {
try {
// MS Internet Explorer (ab v6)
xhr = ActiveXObject("Microsoft.XMLHTTP");
} catch (e) {
try {
// MS Internet Explorer (ab v5)
xhr = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
xhr = undefined;
}
}
}
if (xhr == undefined)
return null;
if (async) {
xhr.onreadystatechange = function () {
if (this.readyState == 4) {
handleAsyncResponse(this.readyState, this.status, this.statusText, this.responseXML, pCallback, userState);
} else {
handleAsyncResponse(this.readyState, undefined, undefined, undefined, pCallback, userState);
}
}
}
if (sServiceUser && sServicePassword) {
xhr.open("POST", sServiceUrl, async, sServiceUser, sServicePassword);
} else {
xhr.open("POST", sServiceUrl, async);
}
if ("timeout" in xhr && ajaxTimeout)
xhr.timeout = ajaxTimeout;
if ("ontimeout" in xhr && ajaxTimeoutCallback) {
xhr.ontimeout = ajaxTimeoutCallback;
}
xhr.setRequestHeader("Content-Type", "text/xml; charset=utf-8");
xhr.send(message);
if (!async) {
return handleSyncResponse(xhr);
}
else {
xhr = null;
return null;
}
}
});
this.DataReader = (function (data) {
this.offset = 0;
this.decodedData = Base64.decode(data);
this.getTypeString = (function () {
return "TcAdsWebService.DataReader";
});
this.readSINT = (function () {
var res = convertDataToInt(this.decodedData.substr(this.offset, 1), 1);
this.offset = this.offset + 1;
return res;
});
this.readINT = (function () {
var res = convertDataToInt(this.decodedData.substr(this.offset, 2), 2);
this.offset = this.offset + 2;
return res;
});
this.readDINT = (function () {
var res = convertDataToInt(this.decodedData.substr(this.offset, 4), 4);
this.offset = this.offset + 4;
return res;
});
this.readBYTE = (function () {
var res = convertDataToUInt(this.decodedData.substr(this.offset, 1), 1);
this.offset = this.offset + 1;
return res;
});
this.readWORD = (function () {
var res = convertDataToUInt(this.decodedData.substr(this.offset, 2), 2);
this.offset = this.offset + 2;
return res;
});
this.readDWORD = (function () {
var res = convertDataToUInt(this.decodedData.substr(this.offset, 4), 4);
this.offset = this.offset + 4;
return res;
});
this.readBOOL = (function () {
var res = this.decodedData.substr(this.offset, 1).charCodeAt(0);
this.offset = this.offset + 1;
if (res === 0)
return false;
if (res === 1)
return true;
return res;
});
this.readString = (function (length) {
if (isNaN(length)) {
throw "Parameter \"length\" has to be a valid number.";
}
var o = 0;
var c;
var ca = [];
while (o < length) { // Read until length or 0 termination
c = this.decodedData.substr(this.offset + o, 1);
var cc = c.charCodeAt(0);
if (cc === 0) {
break;
}
ca.push(c);
o++;
}
var res = ca.join('');
this.offset = this.offset + length;
return res;
});
this.readREAL = (function () {
var decData = [];
decData[0] = convertDataToUInt(this.decodedData.substr(this.offset + 0, 1), 1);
decData[1] = convertDataToUInt(this.decodedData.substr(this.offset + 1, 1), 1);
decData[2] = convertDataToUInt(this.decodedData.substr(this.offset + 2, 1), 1);
decData[3] = convertDataToUInt(this.decodedData.substr(this.offset + 3, 1), 1);
var binData = [];
binData[0] = dec2Binary(decData[0]);
binData[1] = dec2Binary(decData[1]);
binData[2] = dec2Binary(decData[2]);
binData[3] = dec2Binary(decData[3]);
var binStr = binData[3] + binData[2] + binData[1] + binData[0];
var res = binary2Real(binStr, TcAdsWebService.TcAdsWebServiceDataTypes.REAL);
this.offset = this.offset + 4;
return res;
});
this.readLREAL = (function () {
var decData = [];
decData[0] = convertDataToUInt(this.decodedData.substr(this.offset + 0, 1), 1);
decData[1] = convertDataToUInt(this.decodedData.substr(this.offset + 1, 1), 1);
decData[2] = convertDataToUInt(this.decodedData.substr(this.offset + 2, 1), 1);
decData[3] = convertDataToUInt(this.decodedData.substr(this.offset + 3, 1), 1);
decData[4] = convertDataToUInt(this.decodedData.substr(this.offset + 4, 1), 1);
decData[5] = convertDataToUInt(this.decodedData.substr(this.offset + 5, 1), 1);
decData[6] = convertDataToUInt(this.decodedData.substr(this.offset + 6, 1), 1);
decData[7] = convertDataToUInt(this.decodedData.substr(this.offset + 7, 1), 1);
var binData = [];
binData[0] = dec2Binary(decData[0]);
binData[1] = dec2Binary(decData[1]);
binData[2] = dec2Binary(decData[2]);
binData[3] = dec2Binary(decData[3]);
binData[4] = dec2Binary(decData[4]);
binData[5] = dec2Binary(decData[5]);
binData[6] = dec2Binary(decData[6]);
binData[7] = dec2Binary(decData[7]);
var binStr = binData[7] + binData[6] + binData[5] + binData[4] + binData[3] + binData[2] + binData[1] + binData[0];
var res = binary2Real(binStr, TcAdsWebService.TcAdsWebServiceDataTypes.LREAL);
this.offset = this.offset + 8;
return res;
});
});
this.DataWriter = (function () {
this.getTypeString = (function () {
return "TcAdsWebService.DataWriter";
});
this.getBase64EncodedData = (function () {
return Base64.encode(byteArrayToBinaryString(byteArray));
});
this.writeSINT = (function (value) {
byteArray = PrepareData(value, TcAdsWebService.TcAdsWebServiceDataTypes.Integer, 1, byteArray);
});
this.writeINT = (function (value) {
byteArray = PrepareData(value, TcAdsWebService.TcAdsWebServiceDataTypes.Integer, 2, byteArray);
});
this.writeDINT = (function (value) {
byteArray = PrepareData(value, TcAdsWebService.TcAdsWebServiceDataTypes.Integer, 4, byteArray);
});
this.writeBYTE = (function (value) {
byteArray = PrepareData(value, TcAdsWebService.TcAdsWebServiceDataTypes.UnsignedInteger, 1, byteArray);
});
this.writeWORD = (function (value) {
byteArray = PrepareData(value, TcAdsWebService.TcAdsWebServiceDataTypes.UnsignedInteger, 2, byteArray);
});
this.writeDWORD = (function (value) {
byteArray = PrepareData(value, TcAdsWebService.TcAdsWebServiceDataTypes.UnsignedInteger, 4, byteArray);
});
this.writeBOOL = (function (value) {
byteArray = PrepareData(value, TcAdsWebService.TcAdsWebServiceDataTypes.BOOL, 1, byteArray);
});
this.writeString = (function (value, length) {
byteArray = PrepareData(value, TcAdsWebService.TcAdsWebServiceDataTypes.String, length, byteArray);
});
this.writeREAL = (function (value) {
byteArray = PrepareData(value, TcAdsWebService.TcAdsWebServiceDataTypes.REAL, 4, byteArray);
});
this.writeLREAL = (function (value) {
byteArray = PrepareData(value, TcAdsWebService.TcAdsWebServiceDataTypes.LREAL, 8, byteArray);
});
var byteArray = [];
var PrepareData = function (data, type, len, array) {
var j = array.length;
if (type == TcAdsWebService.TcAdsWebServiceDataTypes.String) {
var k;
for (k = 0; k < data.length; k++) {
array[j++] = data.charCodeAt(k);
}
for (; k < len; k++) {
array[j++] = 0;
}
}
else if (type == TcAdsWebService.TcAdsWebServiceDataTypes.BOOL) {
array[j++] = data;
}
else if (type == TcAdsWebService.TcAdsWebServiceDataTypes.Integer || type == TcAdsWebService.TcAdsWebServiceDataTypes.UnsignedInteger) {
if (len == 1) {
array[j++] = ToByte(parseInt((data >> (0)), 10));
}
else if (len == 2) {
data = parseInt(data);
array[j++] = ToByte(parseInt((data >> (0)), 10));
array[j++] = ToByte(parseInt((data >> (8)), 10));
}
else if (len == 4) {
data = parseInt(data);
if (isNaN(data))
data = 0;
array[j++] = ToByte(parseInt((data >> (0)), 10));
array[j++] = ToByte(parseInt((data >> (8)), 10));
array[j++] = ToByte(parseInt((data >> (16)), 10));
array[j++] = ToByte(parseInt((data >> (24)), 10));
}
}
else if (type == TcAdsWebService.TcAdsWebServiceDataTypes.REAL) {
var binary = real2Binary(data, type);
var subBytes = [];
subBytes[0] = binary.substring(0, 8);
subBytes[1] = binary.substring(8, 16);
subBytes[2] = binary.substring(16, 24);
subBytes[3] = binary.substring(24, 32);
array[j++] = binary2Dec(subBytes[3]);
array[j++] = binary2Dec(subBytes[2]);
array[j++] = binary2Dec(subBytes[1]);
array[j++] = binary2Dec(subBytes[0]);
}
else if (type == TcAdsWebService.TcAdsWebServiceDataTypes.LREAL) {
var binary = real2Binary(data, type);
var subBytes = [];
subBytes[0] = binary.substring(0, 8);
subBytes[1] = binary.substring(8, 16);
subBytes[2] = binary.substring(16, 24);
subBytes[3] = binary.substring(24, 32);
subBytes[4] = binary.substring(32, 40);
subBytes[5] = binary.substring(40, 48);
subBytes[6] = binary.substring(48, 56);
subBytes[7] = binary.substring(56, 64);
array[j++] = binary2Dec(subBytes[7]);
array[j++] = binary2Dec(subBytes[6]);
array[j++] = binary2Dec(subBytes[5]);
array[j++] = binary2Dec(subBytes[4]);
array[j++] = binary2Dec(subBytes[3]);
array[j++] = binary2Dec(subBytes[2]);
array[j++] = binary2Dec(subBytes[1]);
array[j++] = binary2Dec(subBytes[0]);
}
return array;
}
});
this.TcAdsReservedIndexGroups = {
"PlcRWMX": 16416,
"PlcRWMB": 16416,
"PlcRWRB": 16432,
"PlcRWDB": 16448,
"SymbolTable": 61440,
"SymbolName": 61441,
"SymbolValue": 61442,
"SymbolHandleByName": 61443,
"SymbolValueByName": 61444,
"SymbolValueByHandle": 61445,
"SymbolReleaseHandle": 61446,
"SymbolInfoByName": 61447,
"SymbolVersion": 61448,
"SymbolInfoByNameEx": 61449,
"SymbolDownload": 61450,
"SymbolUpload": 61451,
"SymbolUploadInfo": 61452,
"SymbolNote": 61456,
"IOImageRWIB": 61472,
"IOImageRWIX": 61473,
"IOImageRWOB": 61488,
"IOImageRWOX": 61489,
"IOImageClearI": 61504,
"IOImageClearO": 61520,
"DeviceData": 61696
};
this.TcAdsWebServiceDataTypes = {
"String": 0,
"BOOL": 1,
"Integer": 2,
"UnsignedInteger": 3,
"LREAL": 4,
"REAL": 5
};
this.AdsState = {
"INVALID": 0,
"IDLE": 1,
"RESET": 2,
"INIT": 3,
"START": 4,
"RUN": 5,
"STOP": 6,
"SAVECFG": 7,
"LOADCFG": 8,
"POWERFAILURE": 9,
"POWERGOOD": 10,
"ERROR": 11,
"SHUTDOWN": 12,
"SUSPEND": 13,
"RESUME": 14,
"CONFIG": 15,
"RECONFIG": 16
};
var byteArrayToBinaryString = function (arr) {
var res = "";
for (var i = 0; i < arr.length; i++) {
res += String.fromCharCode(arr[i] & 0xFF);
}
return res;
}
var Base64 = (function () {
var encode = function (data) {
var out = "", c1, c2, c3, e1, e2, e3, e4;
for (var i = 0; i < data.length;) {
c1 = data.charCodeAt(i++);
c2 = data.charCodeAt(i++);
c3 = data.charCodeAt(i++);
e1 = c1 >> 2;
e2 = ((c1 & 3) << 4) + (c2 >> 4);
e3 = ((c2 & 15) << 2) + (c3 >> 6);
e4 = c3 & 63;
if (isNaN(c2))
e3 = e4 = 64;
else if (isNaN(c3))
e4 = 64;
out += tab.charAt(e1) + tab.charAt(e2) + tab.charAt(e3) + tab.charAt(e4);
}
return out;
}
var decode = function (data) {
var out = "", c1, c2, c3, e1, e2, e3, e4;
for (var i = 0; i < data.length;) {
e1 = tab.indexOf(data.charAt(i++));
e2 = tab.indexOf(data.charAt(i++));
e3 = tab.indexOf(data.charAt(i++));
e4 = tab.indexOf(data.charAt(i++));
c1 = (e1 << 2) + (e2 >> 4);
c2 = ((e2 & 15) << 4) + (e3 >> 2);
c3 = ((e3 & 3) << 6) + e4;
out += String.fromCharCode(c1);
if (e3 != 64)
out += String.fromCharCode(c2);
if (e4 != 64)
out += String.fromCharCode(c3);
}
return out;
}
var tab = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
return { encode: encode, decode: decode };
})();
var real2Binary = function (value, type) {
var exp = 0, man = 0, bias = 0;
switch (type) {
case TcAdsWebService.TcAdsWebServiceDataTypes.LREAL:
exp = 11;
man = 52;
bias = 1023;
break;
case TcAdsWebService.TcAdsWebServiceDataTypes.REAL:
default:
exp = 8;
man = 23;
bias = 127;
}
var sign = (value >= 0.0) ? 0 : 1;
var n = 0, power, sign2;
if (value > 0 || value < 0) {
if (value < 2 && value > -2)
sign2 = -1;
else sign2 = 1;
for (power = 0; n < 1 || n > 2; ++power) {
n = Math.pow(-1, sign) * value / (Math.pow(2, sign2 * power));
}
power--;
} else {
power = bias;
sign2 = -1;
}
var exponent = bias + (sign2 * power);
exponent = exponent.toString(2);
for (var i = exponent.length; i < exp; i++) {
exponent = "0" + exponent;
}
var n2 = 0, temp = 0, fraction = "";
n = n - 1;
for (var i = 1; i < (man + 1) ; i++) {
temp = n2 + 1 / Math.pow(2, i);
if (temp <= n) {
n2 = temp;
fraction += "1";
}
else fraction += "0";
}
var res = sign + exponent + fraction;
return res;
}
var binary2Real = function (binary, type) {
var neg, nullE = true, nullF = true, oneE = true, strE = "", x = 0, exp, man, bias;
if ((binary.charAt(0) == 0))
neg = false;
else
neg = true;
switch (type) {
case TcAdsWebService.TcAdsWebServiceDataTypes.LREAL:
exp = 11;
man = 52;
bias = 1023;
break;
case TcAdsWebService.TcAdsWebServiceDataTypes.REAL:
default:
exp = 8;
man = 23;
bias = 127;
}
for (var i = 1; i <= exp; i++) {
strE += binary.charAt(i);
if (binary.charAt(i) != "0")
nullE = false;
if (binary.charAt(i) != "1")
oneE = false;
}
var strF = "";
for (var i = exp + 1; i <= exp + man; i++) {
strF += binary.charAt(i);
if (binary.charAt(i) != "0")
nullF = false;
}
if (nullE && nullF) {
//return ((!neg) ? "0" : "-0");
// Return zero for negative and positive zero
return 0.0;
}
if (oneE && nullF)
return Infinity;
if (oneE && nullF)
return NaN;
var exponent = binary2Dec(strE) - bias;
var fraction = 0;
for (var i = 0; i < strF.length; ++i) {
fraction = fraction + parseInt(strF.charAt(i)) * Math.pow(2, -(i + 1));
}
fraction = fraction + 1;
var ret = Math.pow(-1, binary.charAt(0)) * fraction * Math.pow(2, exponent);
return ret;
}
var ToByte = function (v) {
return parseInt(v, 10) & 255;
}
var dec2Binary = function (value) {
var buf = "";
var buf2 = "";
var quotient = value;
var i = 0;
do {
buf += (Math.floor(quotient % 2) == 1 ? "1" : "0");
quotient /= 2;
i++;
}
while (i < 8);
buf = buf.split("").reverse().join("");
return buf;
}
var binary2Dec = function (binary) {
var ret = 0;
for (var i = 0; i < binary.length; ++i) {
if (binary.charAt(i) == '1')
ret = ret + Math.pow(2, (binary.length - i - 1));
}
return ret;
}
var convertDataToUInt = function (data, len) {
var res = 0;
if (len == 4) {
res = (data.charCodeAt(3) << 24 | data.charCodeAt(2) << 16 | data.charCodeAt(1) << 8 | data.charCodeAt(0 + 0)) >>> 0; // ">>> 0" = handle value as unsigned
}
else if (len == 2) {
res = (data.charCodeAt(1) << 8 | data.charCodeAt(0)) >>> 0; // ">>> 0" = handle value as unsigned
}
else if (len == 1) {
res = data.charCodeAt(0) >>> 0; // ">>> 0" = handle value as unsigned
}
return res;
}
var convertDataToInt = function (data, len) {
var res = 0;
if (len == 4) {
res = (data.charCodeAt(3) << 24 | data.charCodeAt(2) << 16 | data.charCodeAt(1) << 8 | data.charCodeAt(0));
}
else if (len == 2) {
var cCode = (data.charCodeAt(1) << 8 | data.charCodeAt(0));
var sign = (cCode & 0x8000);
if (sign == 0x8000) {
// Byte 1 = 100000, Byte 0 = 000000
// Fill left 16 Bytes with 1
cCode = cCode | 0xFFFF8000;
} else {
// Byte 1 = 000000, Byte 0 = 000000
// Fill left 16 Bytes with 0
cCode = cCode & 0x7FFF;
}
res = cCode;
}
else if (len == 1) {
// JavaScript handles numbers always as 32 bit integer values;
var cCode = data.charCodeAt(0);
var sign = (cCode & 0x80);
if (sign == 0x80) {
// byte_0 = 100000
// Fill left 24 Bytes with 1
cCode = cCode | 0xFFFFFF80;
} else {
// byte_0 = 000000
// Fill left 24 Bytes with 0
cCode = cCode & 0x7F;
}
res = cCode;
}
return res;
}
});
////////////////////////////////////////////////////
// Expose TcAdsWebService instance to window object.
window.TcAdsWebService = TcAdsWebService;
////////////////////////////////////////////////////
})(window);
////////////////////////////////////////////////////