|
6 | 6 | #include <vector> |
7 | 7 | #include <bitset> |
8 | 8 |
|
9 | | -static const char version[] = "BL4 Serial Decoder v0.1"; |
| 9 | +static const char version[] = "BL4 Serial Decoder v0.2"; |
10 | 10 |
|
11 | 11 |
|
12 | 12 | unsigned char reverseBits(unsigned char b) { |
@@ -79,6 +79,18 @@ unsigned int decode_varint(std::string& remaining_string) { |
79 | 79 | return std::bitset<16>(data_string).to_ulong(); |
80 | 80 | } |
81 | 81 |
|
| 82 | +std::string decode_string(std::string& remaining_string) { |
| 83 | + std::string output = ""; |
| 84 | + int len = decode_varint(remaining_string); |
| 85 | + for (int i = 0; i < len; i++) { |
| 86 | + std::string charbits = remaining_string.substr(0, 7); |
| 87 | + std::reverse(charbits.begin(), charbits.end()); |
| 88 | + output += static_cast<char>(std::bitset<7>(charbits).to_ulong()); |
| 89 | + remaining_string = remaining_string.substr(7); |
| 90 | + } |
| 91 | + return output; |
| 92 | +} |
| 93 | + |
82 | 94 | std::string decode_part(std::string& remaining_string) { |
83 | 95 | int first_value = decode_varint(remaining_string); |
84 | 96 | bool flag = remaining_string.at(0) == '1'; |
@@ -120,9 +132,7 @@ std::string decode_part(std::string& remaining_string) { |
120 | 132 | list_string += std::to_string(decode_varbit(remaining_string)); |
121 | 133 | } |
122 | 134 | if (first_in_list) first_in_list = false; |
123 | | - else if (subtype == "11") { |
124 | | - return "part_decode_error"; |
125 | | - } |
| 135 | + |
126 | 136 | } |
127 | 137 | } |
128 | 138 | list_string += "]"; |
@@ -176,7 +186,9 @@ std::string decode_bitstring(std::string& bitstring) { |
176 | 186 | } |
177 | 187 | } |
178 | 188 | else if (value_type == "11") { |
179 | | - return output_string; |
| 189 | + bitstring = bitstring.substr(3); |
| 190 | + std::string value = decode_string(bitstring); |
| 191 | + output_string += "\"" + value + "\""; |
180 | 192 | } |
181 | 193 | else { |
182 | 194 | bitstring = bitstring.substr(1); |
|
0 commit comments