#include "os/os_types.h"
#include "bsp/bsp.h"
#include "bsp/bsp_driver.h"
#include "libs/utils.h"

#define KTY_TEMP_INTVAL 10
#define KTY_TEMP_OFFSET 4
static const u16 kty_table[] = {
	359, 391, 424, 460, 498, 538, 581, 603, 626, 672, 722, 773, 826, 882, 
	940, 1000, 1062, 1127, 1194, 1262, 1334, 1407, 1482, 1560, 1640, 1722, 1807, 1893, 
	1982, 2073, 2166, 2261, 2357, 2452, 2624 };

#define NTC_TEMP_INTVAL 10
#define NTC_TEMP_OFFSET 1
static const u16 ntc_table[] = {
	43117, 27493, 18015, 12100, 8300, 5825, 4160, 3023,  2232, 1672, 1270, 977, 761, 599,  
	476, 382, 310, 254, 210, 174, 146, 123, 105, 90, 77, 66, 58, 50, 44};

s16 ntc_get_mos_temp(u16 r) {
	int i = 0;
	for (; i < ARRAY_SIZE(ntc_table); i++) {
		if (r >= ntc_table[i]) {
			break;
		}
	}
	if (i == 0) {
		return -40;
	}else if (i >= ARRAY_SIZE(ntc_table)) {
		return 251;
	}else if (r == ntc_table[i]) {
		return (s16)((i - NTC_TEMP_OFFSET) * NTC_TEMP_INTVAL);
	}
	int delta = ntc_table[i-1] - ntc_table[i];
	float detla_tmp = (float)NTC_TEMP_INTVAL / (float)delta * (float)(r - ntc_table[i]); //插值

	return (s16)((i-NTC_TEMP_OFFSET)*NTC_TEMP_INTVAL - detla_tmp);

}

s16 ntc_get_motor_temp(u16 r) {
	int i = 0;
	for (; i < ARRAY_SIZE(kty_table); i++) {
		if (r <= kty_table[i]) {
			break;
		}
	}
	if (i == 0) {
		return -10;
	}else if (i >= ARRAY_SIZE(kty_table)) {
		return 301;
	}else if (r == kty_table[i]) {
		return (s16)((i - KTY_TEMP_OFFSET) * KTY_TEMP_INTVAL);
	}
	int delta = kty_table[i] - kty_table[i - 1];
	float detla_tmp = (float)KTY_TEMP_INTVAL / (float)delta * (float)(r - kty_table[i-1]); //插值

	return (s16)((i-1-KTY_TEMP_OFFSET)*KTY_TEMP_INTVAL + detla_tmp);
}
