BLE.js 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. // 灵敏度
  2. // ArrayBuffer转16进制字符串示例
  3. function ab2hext(buffer) {
  4. var hexArr = Array.prototype.map.call(
  5. new Uint8Array(buffer),
  6. function(bit) {
  7. return ('00' + bit.toString(16)).slice(-2)
  8. }
  9. )
  10. return hexArr.join('');
  11. }
  12. function buf2hex(buffer) {
  13. return Array.prototype.map.call(new Uint8Array(buffer), x => ('00' +
  14. x.toString(16)).slice(-2)).join('');
  15. }
  16. // function unsignedByteToInt(bytes, off) {
  17. // var b3 = bytes[off] & 0xFF;
  18. // var b2 = bytes[off + 1] & 0xFF;
  19. // var b1 = bytes[off + 2] & 0xFF;
  20. // var b0 = bytes[off + 3] & 0xFF;
  21. // return (b0 << 24) | (b1 << 16) | (b2 << 8) | b3;
  22. // }
  23. // function (){}
  24. function unsignedByteToInt(b) {
  25. return b & 255;
  26. }
  27. function unsignedBytesToInt(b0, b1) {
  28. return unsignedByteToInt(b0) + (unsignedByteToInt(b1) << 8);
  29. }
  30. // 字符串转为ArrayBuffer对象,参数为字符串
  31. function str2ab(str) {
  32. var buf = new ArrayBuffer(str.length * 2); // 每个字符占用2个字节
  33. var bufView = new Uint16Array(buf);
  34. for (var i = 0, strLen = str.length; i < strLen; i++) {
  35. bufView[i] = str.charCodeAt(i);
  36. }
  37. return buf;
  38. }
  39. //16进制的字符串 转换为整数
  40. function hex2int(hex) {
  41. var len = hex.length,
  42. a = new Array(len),
  43. code;
  44. for (var i = 0; i < len; i++) {
  45. code = hex.charCodeAt(i);
  46. if (48 <= code && code < 58) {
  47. code -= 48;
  48. } else {
  49. code = (code & 0xdf) - 65 + 10;
  50. }
  51. a[i] = code;
  52. }
  53. return a.reduce(function(acc, c) {
  54. acc = 16 * acc + c;
  55. return acc;
  56. }, 0);
  57. }
  58. //16进制转有符号的整数
  59. function hexToSignedInt(hex) {
  60. let two = parseInt(hex, 16).toString(2);
  61. let bitNum = hex.length * 4;
  62. if (two.length < bitNum) {
  63. while (two.length < bitNum) {
  64. two = "0" + two;
  65. }
  66. }
  67. if (two.substring(0, 1) == "0") {
  68. two = parseInt(two, 2);
  69. return two;
  70. } else {
  71. let two_unsign = "";
  72. two = parseInt(two, 2) - 1;
  73. two = two.toString(2);
  74. two_unsign = two.substring(1, bitNum);
  75. two_unsign = two_unsign.replace(/0/g, "z");
  76. two_unsign = two_unsign.replace(/1/g, "0");
  77. two_unsign = two_unsign.replace(/z/g, "1");
  78. two = parseInt(-two_unsign, 2);
  79. return two;
  80. }
  81. }
  82. //十六进制转ASCII码
  83. function hexCharCodeToStr(hexCharCodeStr) {
  84. var trimedStr = hexCharCodeStr.trim();
  85. var rawStr = trimedStr.substr(0, 2).toLowerCase() === "0x" ? trimedStr.substr(2) : trimedStr;
  86. var len = rawStr.length;
  87. if (len % 2 !== 0) {
  88. alert("存在非法字符!");
  89. return "";
  90. }
  91. var curCharCode;
  92. var resultStr = [];
  93. for (var i = 0; i < len; i = i + 2) {
  94. curCharCode = parseInt(rawStr.substr(i, 2), 16);
  95. resultStr.push(String.fromCharCode(curCharCode));
  96. }
  97. return resultStr.join("");
  98. }
  99. //ASCII码转16进制
  100. function strToHexCharCode(str) {
  101. if (str === "") {
  102. return "";
  103. } else {
  104. var hexCharCode = [];
  105. hexCharCode.push("0x");
  106. for (var i = 0; i < str.length; i++) {
  107. hexCharCode.push((str.charCodeAt(i)).toString(16));
  108. }
  109. return hexCharCode.join("");
  110. }
  111. }
  112. //16进制转字符串
  113. function hexToString(str) {
  114. var trimedStr = str.trim();
  115. var rawStr =
  116. trimedStr.substr(0, 2).toLowerCase() === "0x" ?
  117. trimedStr.substr(2) :
  118. trimedStr;
  119. var len = rawStr.length;
  120. if (len % 2 !== 0) {
  121. // alert("Illegal Format ASCII Code!");
  122. return "";
  123. }
  124. var curCharCode;
  125. var resultStr = [];
  126. for (var i = 0; i < len; i = i + 2) {
  127. curCharCode = parseInt(rawStr.substr(i, 2), 16); // ASCII Code Value
  128. resultStr.push(String.fromCharCode(curCharCode));
  129. }
  130. return resultStr.join("");
  131. }
  132. function getRSSITransDistance(rssi) {
  133. return Math.pow(Math.E, (Math.abs(rssi) - 66.78) / 16.56);
  134. }
  135. export default {
  136. getRSSITransDistance,
  137. ab2hext,
  138. buf2hex,
  139. unsignedByteToInt,
  140. unsignedBytesToInt,
  141. str2ab,
  142. hex2int,
  143. hexToSignedInt,
  144. hexCharCodeToStr,
  145. strToHexCharCode,
  146. hexToString
  147. }