#ifndef _SFRA_TEST_H_
#define _SFRA_TEST_H_

#include "libsfra.h"
#include "driverlib.h"
#include "device.h"
#include "board.h"


void sfra_init(void);
void sfra_task_run(void);


static inline void UARTprintf(const char *pcString)
{
    while (*pcString != '\0')
    {
        SCI_writeCharBlockingFIFO(SCIA_BASE, *pcString++);
    }
}

// ==================== 整数转字符串（支持负数、32位）====================
static inline int int32ToStr(int32_t num, char *str)
{
    int i = 0;
    int isNegative = 0;
    if (num < 0) {
        isNegative = 1;
        num = -num;
    }
    // 逆序存储数字
    do {
        str[i++] = (num % 10) + '0';
        num /= 10;
    } while (num > 0);

    if (isNegative) {
        str[i++] = '-';
    }
    // 反转字符串
    int start = 0;
    int end = i - 1;
    while (start < end) {
        char temp = str[start];
        str[start] = str[end];
        str[end] = temp;
        start++;
        end--;
    }
    str[i] = '\0';
    return i;
}

// ==================== 浮点数转字符串（固定5位小数）====================
static inline int floatToStr5(float value, char *buf)
{
    int len = 0;
    int isNegative = 0;
    if (value < 0) {
        isNegative = 1;
        value = -value;
    }

    // 乘以 100000 并四舍五入
    int64_t scaled = (int64_t)(value * 100000.0f + 0.5f);
    int32_t intPart  = (int32_t)(scaled / 100000);
    int32_t fracPart = (int32_t)(scaled % 100000);

    // 负号
    if (isNegative) {
        buf[len++] = '-';
    }

    // 整数部分
    len += int32ToStr(intPart, buf + len);
    buf[len++] = '.';

    // 小数部分补零到5位
    char fracBuf[6];
    int fracLen = int32ToStr(fracPart, fracBuf);
    int i;
    for (i = 0; i < 5 - fracLen; i++) {
        buf[len++] = '0';
    }
    for (i = 0; i < fracLen; i++) {
        buf[len++] = fracBuf[i];
    }

    buf[len] = '\0';
    return len;
}


#endif
