#include "helpers.h"

void char2byte(char *str, byte *array)
{
    for (int i = 0; i < 2; i++)
    {
        char c = *str;
        if (c >= '0' && c <= '9')
        {
            *array *= 16;
            *array += c - '0';
        }
        else if (c >= 'A' && c <= 'F')
        {
            *array *= 16;
            *array += (c - 'A') + 10;
        }
        else if (c >= 'a' && c <= 'f')
        {
            *array *= 16;
            *array += (c - 'a') + 10;
        }
        str++;
    }
}

void chars2bytes(char *str, byte *array, bool msb)
{
    int len = strlen(str);
    for (int i = 0; i < len; i += 2)
    {
        if (msb)
        {
            char2byte(&str[i], &array[i / 2]);
        }
        else
        {
            char2byte(&str[i], &array[len - 2 - i / 2]);
        }
    }
}

void byte2char(byte *array, char *str)
{
    sprintf(str, "%02x", *array);
}

void bytes2chars(byte *array, byte array_len, char *str, bool msb)
{
    for (int i = 0; i < array_len; i++)
    {
        if (msb)
        {
            byte2char(&array[i], &str[i * 2]);
        }
        else
        {
            byte2char(&array[array_len - 2 - i], &str[i * 2]);
        }
    }
}

void printbytes(byte *array, byte array_len)
{
    Serial.print("0x");
    for (int i = 0; i < array_len; i++)
    {
        Serial.printf("%02x", array[i]);
    }
    Serial.println();
}