Fix XModem CRC
This commit is contained in:
parent
aaaf6cb805
commit
9150f7ae6f
1 changed files with 25 additions and 27 deletions
50
src/xmodem.c
50
src/xmodem.c
|
|
@ -10,8 +10,8 @@
|
||||||
|
|
||||||
int _xmodem_wait(int fd, uint8_t *ret, int timeout_ms);
|
int _xmodem_wait(int fd, uint8_t *ret, int timeout_ms);
|
||||||
|
|
||||||
uint16_t _xmodem_crc(void *buf, size_t len);
|
uint16_t _xmodem_crc(const uint8_t *buf, size_t len);
|
||||||
uint8_t _xmodem_csum(void *buf, size_t len);
|
uint8_t _xmodem_csum(const uint8_t *buf, size_t len);
|
||||||
void _xmodem_status_print(size_t sent, size_t total);
|
void _xmodem_status_print(size_t sent, size_t total);
|
||||||
|
|
||||||
int
|
int
|
||||||
|
|
@ -167,37 +167,35 @@ _xmodem_wait(int fd, uint8_t *ret, int timeout_ms)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint16_t
|
uint8_t
|
||||||
_xmodem_crc(void *buf, size_t len)
|
_xmodem_csum(const uint8_t *data, size_t sz)
|
||||||
{
|
{
|
||||||
uint16_t crc;
|
uint16_t sum = 0;
|
||||||
char i;
|
int i;
|
||||||
|
for (i = 0; i < sz; i++) {
|
||||||
|
sum += data[i];
|
||||||
|
}
|
||||||
|
return (uint8_t)(sum & 0xff);
|
||||||
|
}
|
||||||
|
|
||||||
crc = 0;
|
uint16_t
|
||||||
while (--len >= 0)
|
_xmodem_crc(const uint8_t *data, size_t len)
|
||||||
{
|
{
|
||||||
crc = crc ^ (uint16_t) (*(uint8_t *)buf++) << 8;
|
uint16_t crc = 0;
|
||||||
i = 8;
|
|
||||||
do
|
while ((len--) > 0) {
|
||||||
{
|
uint8_t i = 8;
|
||||||
if (crc & 0x8000)
|
|
||||||
|
crc = crc ^ (uint16_t) *data++ << 8;
|
||||||
|
|
||||||
|
do {
|
||||||
|
if (crc & 0x8000) {
|
||||||
crc = crc << 1 ^ 0x1021;
|
crc = crc << 1 ^ 0x1021;
|
||||||
else
|
} else {
|
||||||
crc = crc << 1;
|
crc = crc << 1;
|
||||||
|
}
|
||||||
} while (--i);
|
} while (--i);
|
||||||
}
|
}
|
||||||
|
|
||||||
return (crc);
|
return (crc);
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t
|
|
||||||
_xmodem_csum(void *buf, size_t len)
|
|
||||||
{
|
|
||||||
uint8_t ret = 0;
|
|
||||||
|
|
||||||
for (size_t i = 0; i < len; i++) {
|
|
||||||
ret += ((uint8_t *)buf)[i];
|
|
||||||
}
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue