| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 | 
							- #ifndef EUPHONIUM_BELL_UTILS
 
- #define EUPHONIUM_BELL_UTILS
 
- #include <stdint.h>  // for int32_t, int64_t
 
- #include <string.h>  // for NULL
 
- #ifdef _WIN32
 
- #include <WinSock2.h>
 
- #else
 
- #include <sys/time.h>  // for timeval, gettimeofday
 
- #include <unistd.h>    // for usleep
 
- #endif
 
- #include <cmath>   // for floor
 
- #include <string>  // for string
 
- #ifdef ESP_PLATFORM
 
- #include "esp_system.h"
 
- #endif
 
- namespace bell {
 
- std::string generateRandomUUID();
 
- void freeAndNull(void*& ptr);
 
- std::string getMacAddress();
 
- struct tv {
 
-   tv() {}
 
-   tv(timeval tv) : sec(tv.tv_sec), usec(tv.tv_usec){};
 
-   tv(int32_t _sec, int32_t _usec) : sec(_sec), usec(_usec){};
 
-   static tv now() {
 
-     tv timestampNow;
 
- #if _WIN32
 
-     static const uint64_t EPOCH = ((uint64_t)116444736000000000ULL);
 
-     SYSTEMTIME system_time;
 
-     FILETIME file_time;
 
-     uint64_t time;
 
-     GetSystemTime(&system_time);
 
-     SystemTimeToFileTime(&system_time, &file_time);
 
-     time = ((uint64_t)file_time.dwLowDateTime);
 
-     time += ((uint64_t)file_time.dwHighDateTime) << 32;
 
-     timestampNow.sec = (long)((time - EPOCH) / 10000000L);
 
-     timestampNow.usec = (long)(system_time.wMilliseconds * 1000);
 
- #else
 
-     timeval t;
 
-     gettimeofday(&t, NULL);
 
-     timestampNow.sec = t.tv_sec;
 
-     timestampNow.usec = t.tv_usec;
 
- #endif
 
-     return timestampNow;
 
-   }
 
-   int32_t sec;
 
-   int32_t usec;
 
-   int64_t ms() {
 
-     return (sec * (int64_t)1000) + (usec / 1000);
 
-   }
 
-   tv operator+(const tv& other) const {
 
-     tv result(*this);
 
-     result.sec += other.sec;
 
-     result.usec += other.usec;
 
-     if (result.usec > 1000000) {
 
-       result.sec += result.usec / 1000000;
 
-       result.usec %= 1000000;
 
-     }
 
-     return result;
 
-   }
 
-   tv operator/(const int& other) const {
 
-     tv result(*this);
 
-     int64_t millis = result.ms();
 
-     millis = millis / other;
 
-     result.sec = std::floor(millis / 1000.0);
 
-     result.usec = (int32_t)((int64_t)(millis * 1000) % 1000000);
 
-     return result;
 
-   }
 
-   tv operator-(const tv& other) const {
 
-     tv result(*this);
 
-     result.sec -= other.sec;
 
-     result.usec -= other.usec;
 
-     while (result.usec < 0) {
 
-       result.sec -= 1;
 
-       result.usec += 1000000;
 
-     }
 
-     return result;
 
-   }
 
- };
 
- }  // namespace bell
 
- #ifdef ESP_PLATFORM
 
- #include <freertos/FreeRTOS.h>
 
- #define BELL_SLEEP_MS(ms) vTaskDelay(ms / portTICK_PERIOD_MS)
 
- #define BELL_YIELD() taskYIELD()
 
- #elif defined(_WIN32)
 
- #define BELL_SLEEP_MS(ms) Sleep(ms)
 
- #define BELL_YIELD() ;
 
- #else
 
- #define BELL_SLEEP_MS(ms) usleep(ms * 1000)
 
- #define BELL_YIELD() ;
 
- #endif
 
- #endif
 
 
  |