github.com/jingruilea/kubeedge@v1.2.0-beta.0.0.20200410162146-4bb8902b3879/mappers/modbus_mapper/src/common.js (about) 1 const fs = require('fs'); 2 const path = require('path'); 3 const util = require('util'); 4 const mkdirp = require('mkdirp'); 5 6 // bitArrayToInt change bit array to Int 7 function bitArrayToInt(bitArr, callback) { 8 let bitStr = ''; 9 if (bitArr.length > 0 && bitArr.length < 64) { 10 for (let i = 0; i < bitArr.length; i++){ 11 bitStr = bitStr + bitArr[i].toString(); 12 } 13 num = parseInt(bitStr,2); 14 callback(num); 15 } 16 } 17 18 // byteArrayToInt change one byte array to Int 19 function byteArrayToInt(byteArr, callback) { 20 let bitArr = ''; 21 if (byteArr.length > 0 && byteArr.length < 5){ 22 for (let i = 0; i < byteArr.length; i++){ 23 bitArr = bitArr + (byteArr[i]).toString(2).padStart(8, '0'); 24 } 25 callback(parseInt(bitArr, 2)); 26 } 27 } 28 29 // twoByteArrayToInt change two byte array to Int 30 function twoByteArrayToInt(byteArr, callback) { 31 let bitArr = ''; 32 if (byteArr.length > 0 && byteArr.length < 5){ 33 for (let i = 0; i < byteArr.length; i++){ 34 bitArr = bitArr + (byteArr[i]).toString(2).padStart(16, '0'); 35 } 36 callback(parseInt(bitArr, 2)); 37 } 38 } 39 40 // IntToByteArray change Int to byte array 41 function IntToByteArray(value, callback) { 42 if ((value).toString(2).length > 32){ 43 let cs1 = (value).toString(2).slice(0,(value).toString(2).length-32); 44 let cs2 = (value).toString(2).slice((value).toString(2).length-32); 45 Int32ToByte(parseInt(cs1, 2), (arr1)=>{ 46 Int32ToByte(parseInt(cs2, 2), (arr2)=>{ 47 arr1 = arr1.concat(arr2); 48 callback(arr1); 49 }); 50 }); 51 } else { 52 Int32ToByte(value, (arr)=>{ 53 callback(arr); 54 }); 55 } 56 } 57 58 // Int32ToByte change Int32 num to byte array 59 function Int32ToByte(value, callback) { 60 let byteArr = []; 61 for (let i = 16; i >= 0; i = i - 16) { 62 if((value >> i & 0xffff) != 0) { 63 byteArr.push(value >> i & 0xffff); 64 } 65 } 66 callback(byteArr); 67 } 68 69 // switchRegister reverse the order of array 70 function switchRegister(data, callback) { 71 let switchData = []; 72 for (let i = 0; i < data.length/2; i++) { 73 switchData[i] = data[data.length-i-1]; 74 switchData[data.length-i-1] = data[i]; 75 } 76 callback(switchData) 77 } 78 79 // switchByte exchange lower and higher byte value of two byte data 80 function switchByte(data, callback){ 81 let switchData = []; 82 let InternalData = []; 83 for (let i = 0; i < data.length; i++){ 84 InternalData[0] = data[i] & 0xff; 85 InternalData[1] = data[i] >> 8 & 0xff; 86 byteArrayToInt(InternalData, (bitarr)=>{ 87 switchData[i] = bitarr; 88 }); 89 } 90 callback(switchData) 91 } 92 93 module.exports = {bitArrayToInt, byteArrayToInt, IntToByteArray, switchRegister, switchByte, twoByteArrayToInt};