/*!
    \file    main.c
    \brief   led spark with systick, USART print and key example

    \version 2024-02-22, V2.1.0, firmware for GD32E23x
*/
#include "main.h"
#include <stdio.h>
#include "gd32e23x.h"
#include "systick.h"
#include "gd32e23x_libopt.h"
#include "rs485.h"
#include "led.h"
#include "i2c.h"
#include "ldc1612.h"
#include "tmp112.h"

uint32_t g_temperature_uint32;
uint32_t g_eddy_current_value_uint32;

/*!
    \brief      main function
    \param[in]  none
    \param[out] none
    \retval     none
*/
int main(void) {
    setbuf(stdout, NULL);
    /* configure systick */
    systick_config();
    /* configure USART */
    rs485_config();
    /* configure LED */
    led_config();
    /* configure I2C */
    i2c_gpio_config();
    i2c_config();

    ldc1612_iic_get_sensor_infomation();
    /* configure LDC1612 */
    ldc1612_single_ch0_config();

    while (1) {
        delay_ms(500);
        g_eddy_current_value_uint32 = 0;
        g_temperature_uint32 = 0;
        g_eddy_current_value_uint32 = ldc1612_get_raw_channel_result(CHANNEL_0);
        g_temperature_uint32 = tmp112a_get_raw_channel_result();
    }
}

/* retarget the C library printf function to the USART */
int _write(int fd, char *pBuffer, int size) {
    for (int i = 0; i < size; i++) {
        usart_data_transmit(USART0, (uint8_t) pBuffer[i]);
        while (RESET == usart_flag_get(USART0, USART_FLAG_TBE));
    }
    return size;
}
