Skip to content

Instantly share code, notes, and snippets.

@Erol444
Created January 16, 2023 17:12
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Erol444/85d6ef7ae9c946f5688854b86c548dc7 to your computer and use it in GitHub Desktop.
Save Erol444/85d6ef7ae9c946f5688854b86c548dc7 to your computer and use it in GitHub Desktop.
OAK MxID to Mac address utility
g++ mxid2mac.cpp -o mxid2mac
#include <cstdio>
#include <array>
#include <cstdint>
#include <string>
uint32_t sbr_initial_checksum() {
return 5381;
}
uint32_t sbr_compute_checksum_prev(const void* buffer, uint32_t size, uint32_t prev_checksum) {
uint32_t checksum = prev_checksum;
uint8_t* p = (uint8_t*)buffer;
for(unsigned int i = 0; i < size; i++) {
checksum = ((checksum << 5) + checksum) + p[i]; /* hash * 33 + p[i] */
}
return checksum;
}
uint32_t sbr_compute_checksum(const void* buffer, uint32_t size) {
return sbr_compute_checksum_prev(buffer, size, sbr_initial_checksum());
}
// LUXONIS MAC base 44-A9-2C-3
static std::array<uint8_t, 6> macAddressOverride = {};
constexpr const uint8_t LUXONIS_MAC_ADDRESS_BASE[] = {0x44, 0xA9, 0x2C, 0x30, 0x00, 0x00};
std::string mxid2mac(std::string mxid) {
uint8_t eaddr[] = {0x44, 0xA9, 0x2C, 0x30, 0x00, 0x00};
int len = mxid.size();
uint32_t checksum = sbr_compute_checksum(mxid.c_str(), len);
uint8_t deviceMacAddress[] = {
0x00, 0x00, 0x00,
static_cast<uint8_t>((checksum >> 16) & 0x0F),
static_cast<uint8_t>((checksum >> 8) & 0xFF),
static_cast<uint8_t>(checksum & 0xFF)
};
for(int i = 0; i < 6; i++){
eaddr[i] = LUXONIS_MAC_ADDRESS_BASE[i] | deviceMacAddress[i];
}
std::string res = "";
for(int i = 0; i < 6; i++){
char buff[16] = {};
if(i < 5){
snprintf(buff, sizeof(buff), "%02X:", eaddr[i]);
// printf("%02X:", eaddr[i]);
} else {
snprintf(buff, sizeof(buff), "%02X", eaddr[i]);
// printf("%02X\n", eaddr[i]);
}
res += buff;
}
return res;
}
int main(int argc, char** argv) {
if(argc <= 1) {
printf("Usage: %s [mxid]\n", argv[0]);
return -1;
}
printf("%s\n", mxid2mac(argv[1]).c_str());
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment