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};