|
15 | 15 | v1.0 - релиз |
16 | 16 | v1.1 - исправлена критическая ошибка |
17 | 17 | v1.2 - добавлена bool pack(uint8_t *ptr, uint32_t size) |
| 18 | + v1.3 - исправлена критическая ошибка |
18 | 19 | */ |
19 | 20 |
|
20 | 21 | #ifndef _Hamming_h |
@@ -79,16 +80,16 @@ class Hamming { |
79 | 80 | return 1; |
80 | 81 | } |
81 | 82 | // распаковать данные |
82 | | - // возврат: 0 ОК, 1 исправлены ошибки, 2 и 3 - есть неисправленные ошибки |
| 83 | + // возврат: 0 ОК, 1 исправлены ошибки, 2 и 3 - есть неисправленные ошибки, 4 - битый пакет, 5 - не удалось аллоцировать буфер |
83 | 84 | uint32_t unpack(uint8_t* data, uint32_t size) { |
84 | 85 | // 0. Считаем и создаём буфер |
| 86 | + if ((size & (chunkSize - 1)) != 0) return stat = 4; // не кратно размеру чанка |
85 | 87 | uint8_t signif = chunkSizeB - (HAM_SIZE + 1); // битов даты на чанк |
86 | | - if ((size & chunkSize) != 0) return 0; // не кратно размеру чанка |
87 | 88 | chunkAmount = (uint32_t)size / chunkSize; // колво чанков |
88 | 89 | bytes = chunkAmount * signif / 8; // размер буфера, байт (округл. вниз) |
89 | 90 | if (buffer) free(buffer); // чисти старый |
90 | 91 | buffer = (uint8_t*)malloc(bytes); // выделяем |
91 | | - if (!buffer) return 0; // не удалось создать |
| 92 | + if (!buffer) return stat = 5; // не удалось создать |
92 | 93 | memset(buffer, 0, bytes); // чисти чисти |
93 | 94 | uint8_t buf[size]; |
94 | 95 | int ptrCount = 0; |
@@ -131,7 +132,7 @@ class Hamming { |
131 | 132 | return stat; |
132 | 133 | } |
133 | 134 |
|
134 | | - // возврат: 0 ОК, 1 исправлены ошибки, 2 и 3 - есть неисправленные ошибки |
| 135 | + // возврат: возврат: 0 ОК, 1 исправлены ошибки, 2 и 3 - есть неисправленные ошибки, 4 - битый пакет, 5 - не удалось аллоцировать буфер |
135 | 136 | uint8_t status() { |
136 | 137 | return stat; |
137 | 138 | } |
|
0 commit comments