Skip to content

Commit 23c196c

Browse files
committed
Separate class for bitwise functions
1 parent 27bb99b commit 23c196c

File tree

3 files changed

+28
-23
lines changed

3 files changed

+28
-23
lines changed

src/BitUtils.js

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
class BitUtils {
2+
static bitsStrToBuffer(bitsStr) {
3+
let buffer = Buffer.alloc(Math.ceil(bitsStr.length / 8));
4+
5+
for (let c = 0; c < bitsStr.length; c += 8)
6+
buffer.writeUInt8(parseInt(bitsStr.substr(c, 8).padEnd(8, '0'), 2), c / 8); //padEnd need because last byte can be without trailing zeroes
7+
8+
return buffer;
9+
};
10+
11+
static bufferToBitsStr(buffer) {
12+
let bitsStr = '';
13+
14+
for(let i = 0; i < buffer.length; i++)
15+
bitsStr += ("00000000" + (buffer.readUInt8(i)>>>0).toString(2)).substr(-8);
16+
17+
return bitsStr;
18+
};
19+
}
20+
21+
module.exports = BitUtils;

src/Protocols/HomeBrew/VoiceData.js

Lines changed: 6 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ const DMR = require('../../DMR');
33
const Golay2087 = require('../../Encoders/Golay2087');
44
const Trellis = require('../../Encoders/Trellis');
55
const BPTC19696 = require('../../Encoders/BPTC19696');
6+
const BitUtils = require("../../BitUtils");
67

78
class VoiceData extends Packet {
89
static CALL_TYPE_GROUP = 0;
@@ -111,7 +112,7 @@ class VoiceData extends Packet {
111112

112113
let colorCode = (code >> 4) & 0x0F;
113114
let dataType = (code >> 0) & 0x0F;
114-
let bitsStr = this.bufferToBits(buffer);
115+
let bitsStr = BitUtils.bufferToBitsStr(buffer);
115116
let dataBits;
116117

117118
if(dataType===DMR.Packet.DATA_TYPE_CONFIRMED_DATA_CONT) {
@@ -122,45 +123,27 @@ class VoiceData extends Packet {
122123
dataBits = BPTC19696.decode(bitsStr.substring(0, 98) + bitsStr.substring(166))
123124
}
124125

125-
return [DMR.Packet.from(this.bitsToBuffer(dataBits), dataType), colorCode];
126+
return [DMR.Packet.from(BitUtils.bitsStrToBuffer(dataBits), dataType), colorCode];
126127
}
127128

128129
static encodeDMR(dmr, colorCode) {
129130
let slotType = Golay2087.encode(((colorCode << 4) & 0xF0) | ((dmr.dataType << 0) & 0x0F));
130131

131-
let bitsSlot = this.bufferToBits(Buffer.from(slotType));
132+
let bitsSlot = BitUtils.bufferToBitsStr(Buffer.from(slotType));
132133

133134
let l_slot = bitsSlot.substr(0, 10);
134135
let r_slot = bitsSlot.substr(10, 10);
135136

136137
let sync_data = '110101011101011111110111011111111101011101010111';
137138

138-
let bitsPayload = this.bufferToBits(dmr.getBuffer());
139+
let bitsPayload = BitUtils.bufferToBitsStr(dmr.getBuffer());
139140

140141
let encodedData = BPTC19696.encode(bitsPayload);
141142

142143
let outPacket = encodedData.substr(0, 98) + l_slot + sync_data + r_slot + encodedData.substr(98);
143144

144-
return this.bitsToBuffer(outPacket);
145+
return BitUtils.bitsStrToBuffer(outPacket);
145146
}
146-
147-
static bitsToBuffer(bitsStr) {
148-
let buffer = Buffer.alloc(Math.ceil(bitsStr.length / 8));
149-
150-
for (let c = 0; c < bitsStr.length; c += 8)
151-
buffer.writeUInt8(parseInt(bitsStr.substr(c, 8).padEnd(8, '0'), 2), c / 8); //padEnd need because last byte can be without trailing zeroes
152-
153-
return buffer;
154-
};
155-
156-
static bufferToBits(buffer) {
157-
let bitsStr = '';
158-
159-
for(let i = 0; i < buffer.length; i++)
160-
bitsStr += ("00000000" + (buffer.readUInt8(i)>>>0).toString(2)).substr(-8);
161-
162-
return bitsStr;
163-
};
164147
}
165148

166149

src/index.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,5 @@ module.exports = {
88

99

1010
DMRConst: require('./DMRConst'),
11+
BitUtils: require('./BitUtils'),
1112
};

0 commit comments

Comments
 (0)