#ifndef _KNOXAI_LOGGER_H_
#define _KNOXAI_LOGGER_H_

#include <stdio.h>
#include <stdint.h>
#include <string.h>

//#define DEBUG_KNOXAI 1

#define    LOG_ENTRY_SIZE  128
#define    LOG_MSG_SIZE    (LOG_ENTRY_SIZE - sizeof(uint32_t) - sizeof(uint32_t))
#define TAG "KNOX_AI:"

static char KNOXAI_log_msg[LOG_MSG_SIZE];

#include "knoxai_vendor_utils.h"

#define KNOXAI_LOG(...)    do {                                     \
        snprintf(KNOXAI_log_msg, LOG_MSG_SIZE - 1, TAG __VA_ARGS__);\
        KNOXAI_log_msg[LOG_MSG_SIZE - 1] = '\0';                    \
        VENDOR_PRINTF(KNOXAI_log_msg);                              \
} while(0);

#ifdef DEBUG_KNOXAI
#define KNOXAI_DEBUG_LOG(...) KNOXAI_LOG(__VA_ARGS__)
#define KNOXAI_DBG_DUMP(label, data, data_len)                        \
{                                                                   \
    uint32_t i;                                                     \
    char buf[50] = { 0 };                                           \
                                                                    \
    KNOXAI_LOG("DBG_DUMP: %s(%d)", label, data_len);                  \
                                                                    \
    for (i = 0; i < data_len; i++) {                                \
        int offset = 3 * (i % 16);                                  \
        snprintf(buf + offset, 50-offset, "%02X ", *((uint8_t*)data + i));    \
        if (i % 16 == 15) {                                         \
            KNOXAI_LOG("%s", buf);                                    \
            memset(buf, 0, sizeof(buf));                            \
        }                                                           \
    }                                                               \
    KNOXAI_LOG("%s", buf);                                            \
}   
#else
#define KNOXAI_DEBUG_LOG(...)
#define KNOXAI_DBG_DUMP(label, data, data_len)
#endif

#endif // _KNOXAI_LOGGER_H_
