/* Includes ------------------------------------------------------------------*/ #include "utils.h" #include "bsp_common.h" const char Hex2Ascii[17] = "0123456789ABCDEF"; int hex_printf (const uint8_t *buff, int count) { uint32_t i = 0, j = 0; char str_val[75] = {0}; uint32_t index = 0; uint32_t str_index = 0; uint32_t cnt = (count+15)>>4; if (count < 0) { return -1; } if (cnt > 16) { cnt = 16; //BSP_printf("!!! TOO LONG. ONLY SHOW HEAD 256 bytes !!!\n"); } for (i = 0; i < cnt; i++) { index = 0; str_index = 0; for (j = 0; j < 16; j++) { if (j + (i << 4) < count) { str_val[index++] = Hex2Ascii[(buff[j + (i << 4)] & 0xF0) >> 4]; str_val[index++] = Hex2Ascii[buff[j + (i << 4)] & 0xF]; str_val[index++] = ' '; } else { str_val[index++] = ' '; str_val[index++] = ' '; str_val[index++] = ' '; } } index += str_index; str_val[index++] = '\0'; str_val[index++] = '\0'; printf("%s\r\n", str_val); } return 0; } /****************************************************************************** * Name: CRC-16/XMODEM x16+x12+x5+1 * Poly: 0x1021 * Init: 0x0000 * Refin: False * Refout: False * Xorout: 0x0000 * Alias: CRC-16/ZMODEM,CRC-16/ACORN *****************************************************************************/ uint16_t crc16_xmodem (uint8_t *data, uint16_t length) { uint8_t i; uint16_t crc = 0; // Initial value while(length--) { crc ^= (uint16_t)(*data++) << 8; // crc ^= (uint16_t)(*data)<<8; data++; for (i = 0; i < 8; ++i) { if ( crc & 0x8000 ) crc = (crc << 1) ^ 0x1021; else crc <<= 1; } } return crc; } uint32_t crc32_step (uint32_t in_crc, const void *buf, uint32_t size) { static uint32_t crc_table[256] = {0, 0,}; uint32_t i = 0, j = 0, crc = 0; if (!crc_table[1]) { for (i = 0; i < 256; i++) { crc = i; for (j = 0; j < 8; j++) { crc = (crc & 1) ? ((crc>>1)^0xEDB88320ul) : (crc>>1); } crc_table[i] = crc; } } crc = in_crc ^ 0xFFFFFFFFul; for (i = 0; i < size; i++) { crc = crc_table[(crc ^ ((const uint8_t *)buf)[i]) & 0xFF]^(crc>>8); } return crc ^ 0xFFFFFFFFul; }