From 73263c3d044c1d7bd8e2a74a302817fd2c05b405 Mon Sep 17 00:00:00 2001 From: cyberman54 Date: Sun, 27 Dec 2020 23:43:45 +0100 Subject: [PATCH] externalize hash code to library --- include/hash.h | 2 +- platformio_orig.ini | 1 + src/hash.cpp | 52 +++------------------------------------------ 3 files changed, 5 insertions(+), 50 deletions(-) diff --git a/include/hash.h b/include/hash.h index 2caa6133..cfd96ce7 100644 --- a/include/hash.h +++ b/include/hash.h @@ -2,7 +2,7 @@ #define _HASH_H #include -#include +#include uint32_t IRAM_ATTR hash(const char *data, int len); diff --git a/platformio_orig.ini b/platformio_orig.ini index 3b013c97..27e0e688 100644 --- a/platformio_orig.ini +++ b/platformio_orig.ini @@ -79,6 +79,7 @@ lib_deps_sensors = boschsensortec/BSEC Software Library @ 1.6.1480 https://github.com/ricki-z/SDS011.git lib_deps_basic = + https://github.com/SukkoPera/Arduino-Rokkit-Hash.git bblanchon/ArduinoJson @ ^6 jchristensen/Timezone @ ^1.2.4 makuna/RTC @ ^2.3.5 diff --git a/src/hash.cpp b/src/hash.cpp index 172dca5d..32e8b1c5 100644 --- a/src/hash.cpp +++ b/src/hash.cpp @@ -36,55 +36,9 @@ #include "hash.h" -uint32_t IRAM_ATTR rokkit(const char *data, int len) { - uint32_t hash, tmp; - int rem; - - if (len <= 0 || data == 0) - return 0; - hash = len; - rem = len & 3; - len >>= 2; - - /* Main loop */ - while (len > 0) { - hash += *((uint16_t *)data); - tmp = (*((uint16_t *)(data + 2)) << 11) ^ hash; - hash = (hash << 16) ^ tmp; - data += 2 * 2; - hash += hash >> 11; - len--; - } - - /* Handle end cases */ - switch (rem) { - case 3: - hash += *((uint16_t *)data); - hash ^= hash << 16; - hash ^= ((uint32_t)data[2]) << 18; - hash += hash >> 11; - break; - case 2: - hash += *((uint16_t *)data); - hash ^= hash << 11; - hash += hash >> 17; - break; - case 1: - hash += (signed char)*data; - hash ^= hash << 10; - hash += hash >> 1; - } - - /* Force "avalanching" of final 127 bits */ - hash ^= hash << 3; - hash += hash >> 5; - hash ^= hash << 4; - hash += hash >> 17; - hash ^= hash << 25; - hash += hash >> 6; - - return hash; -} +#ifdef ROKKIT_ENABLE_8BIT_OPTIMIZATIONS +#undef ROKKIT_ENABLE_8BIT_OPTIMIZATIONS +#endif uint32_t IRAM_ATTR hash(const char *data, int len) { return rokkit(data, len);