OpenDTU-old/src/Utils.cpp
2022-10-20 22:25:51 +02:00

34 lines
810 B
C++

#include "Utils.h"
#include <Esp.h>
uint32_t Utils::getChipId()
{
uint32_t chipId = 0;
for (int i = 0; i < 17; i += 8) {
chipId |= ((ESP.getEfuseMac() >> (40 - i)) & 0xff) << i;
}
return chipId;
}
uint64_t Utils::generateDtuSerial()
{
uint32_t chipId = getChipId();
uint64_t dtuId = 0;
// Product category (char 1-4): 1 = Micro Inverter, 999 = Dummy
dtuId |= 0x199900000000;
// Year of production (char 5): 1 equals 2015 so hard code 8 = 2022
dtuId |= 0x80000000;
// Week of production (char 6-7): Range is 1-52 s hard code 1 = week 1
dtuId |= 0x0100000;
// Running Number (char 8-12): Derived from the ESP chip id
for (uint8_t i = 0; i < 5; i++) {
dtuId |= (chipId % 10) << (i * 4);
chipId /= 10;
}
return dtuId;
}