#include "control.h"


//#include <stdio.h>
//#include <stdarg.h>
//#include <string.h>
ctrl_struct Control; //FLASH    (rx)

void control_init(void)
{
	Control.dev_type		= DEV_TYPE;
	Control.ble_mode_set 	= ble_raw;
	Control.ble_mode_now 	= ble_off;
	Control.serial_number 	= BASE_SERIAL_NUM;
	Control.password 		= BASE_PASSWORD;
	Control.mesh_netid 		= BASE_MESH_ID;
	Control.mesh_adr 		= BASE_MESH_ADR;
	Control.master_adr 		= BASE_MASTER_ADR;
	Control.ble_ask 		= false;
}

void control_init_var(ctrl_struct * control)
{
	control->dev_type		= DEV_TYPE;
	control->ble_mode_set 	= ble_off;
	control->ble_mode_set 	= ble_off;
	control->serial_number 	= BASE_SERIAL_NUM;
	control->password 		= BASE_PASSWORD;
	control->mesh_netid 	= BASE_MESH_ID;
	control->mesh_adr 		= BASE_MESH_ADR;
	control->master_adr 	= BASE_MASTER_ADR;
	control->ble_ask 		= false;
}


void lets_sleep()
{
//	//тразисторное отключение
//	HAL_GPIO_WritePin(AFE_PWR_PORT, AFE_PWR_PIN, 	SET);
//	HAL_GPIO_WritePin(SD_PWR_GPIO_Port, SD_PWR_Pin, SET);
//	//Дисплей отключение
//	GC9A01A_DeInit();
//	GC9A01A_SetBL(0);
//	HAL_GPIO_WritePin(DISP_PWR_GPIO_Port, DISP_PWR_Pin, RESET);
//	//отключенеи простой переферии
//	HAL_GPIO_WritePin(ADC_PWR_GPIO_Port, ADC_PWR_Pin, RESET);
//	ble_deinit();
//	I2c_off();//деинициализировали I2C
//	HAL_GPIO_WritePin(I2C1_PWR_GPIO_Port, I2C1_PWR_Pin, RESET);//выключили I2C1
//	HAL_GPIO_WritePin(I2C2_PWR_GPIO_Port, I2C2_PWR_Pin, RESET);//выключили I2C2
//	HAL_GPIO_WritePin(POT_PWR_GPIO_Port, POT_PWR_Pin, RESET);//без этого работает фиг знает почему
//
//	/*GC9A01A_DeInit();
//	HAL_GPIO_WritePin(DISP_PWR_GPIO_Port, DISP_PWR_Pin, RESET);
//	GC9A01A_SetBL(0);*/
//
//	HAL_PWR_DisableWakeUpPin(PWR_WAKEUP_PIN1);
//	HAL_PWR_DisableWakeUpPin(PWR_WAKEUP_PIN2);
//	//Сейчас второй кнопки нет!!
//	//HAL_PWR_DisableWakeUpPin(PWR_WAKEUP_PIN2);//если вторая кнопка тоже подключена PC0
//	__HAL_PWR_CLEAR_FLAG(PWR_FLAG_WU);
//	HAL_PWR_EnableWakeUpPin(PWR_WAKEUP_PIN1);
//	HAL_PWR_EnableWakeUpPin(PWR_WAKEUP_PIN2);//если вторая кнопка тоже подключена PC0
//	HAL_PWR_EnterSTANDBYMode();
}

////сюда нужно добавить проверку читаемых данных ,чтобы не читать пустой режим
//void FL_read_str(ctrl_struct * control)
//{
//	uint8_t data[sizeof(ctrl_struct)] = {0};
//	ctrl_struct buf_str;//структура для проверки данных
//	for(int i = 0; i < sizeof(ctrl_struct); i++)
//	{
//		data[i] = FL_read_byte(MEM_ADR+i);
//	}
//	//memcpy(control,data,sizeof(ctrl_struct));
//	memcpy(&buf_str,data,sizeof(ctrl_struct));
//	//может сделать проверку валидности данных
//	update_str(&buf_str,control);
//}
//
////Функция обновления структуры
//int update_str(ctrl_struct * buf_str,ctrl_struct * main_str)
//{
//	int correct_val = 0;
//	uint8_t counter = 0;
//	//проверим осноные настройки
//	if(buf_str->serial_number >=  MIN_SERIAL_NUM && buf_str->serial_number <=  MAX_SERIAL_NUM)
//	{
//		main_str->serial_number = buf_str->serial_number;
//		correct_val|=(1<<counter);//выставили бит что значение корректно
//	}
//	counter++;
//
//	if(buf_str->password >=  MIN_PASS && buf_str->password <=  MAX_PASS)
//	{
//		main_str->password = buf_str->password;
//		correct_val|=(1<<counter);//выставили бит что значение корректно
//	}
//	counter++;
//
//	if(buf_str->mesh_netid >=  MIN_MESH_ID  && buf_str->mesh_netid <=  MAX_MESH_ID)
//	{
//		main_str->mesh_netid = buf_str->mesh_netid;
//		correct_val|=(1<<counter);//выставили бит что значение корректно
//	}
//	counter++;
//
//	if(buf_str->mesh_adr >=  MIN_SERIAL_NUM && buf_str->mesh_adr <=  MAX_SERIAL_NUM)
//	{
//		main_str->mesh_adr = buf_str->mesh_adr;
//		correct_val|=(1<<counter);//выставили бит что значение корректно
//	}
//	counter++;
//
//	if(buf_str->master_adr >=  MIN_MESH_MASTER_ID && buf_str->master_adr <=  MAX_MESH_MASTER_ID)
//	{
//		main_str->master_adr = buf_str->master_adr;
//		correct_val|=(1<<counter);//выставили бит что значение корректно
//	}
//	counter++;
//
//	//настройки ФПГ
//	if(buf_str->ppg_hr_high >=  HR_HIGH_MIN && buf_str->ppg_hr_high <=  HR_HIGH_MAX)
//	{
//		main_str->ppg_hr_high = buf_str->ppg_hr_high;
//		correct_val|=(1<<counter);//выставили бит что значение корректно
//	}
//	counter++;
//
//	if(buf_str->ppg_hr_low >=  HR_LOW_MIN && buf_str->ppg_hr_low <=  HR_LOW_MAX)
//	{
//		main_str->ppg_hr_low = buf_str->ppg_hr_low;
//		correct_val|=(1<<counter);//выставили бит что значение корректно
//	}
//	counter++;
//
//	if(buf_str->ppg_hr_wait >=  HR_WAIT_MIN && buf_str->ppg_hr_wait <=  HR_WAIT_MAX)
//	{
//		main_str->ppg_hr_wait = buf_str->ppg_hr_wait;
//		correct_val|=(1<<counter);//выставили бит что значение корректно
//	}
//	counter++;
//
//	//настройки акселерометра
//	if(buf_str->mpu_low_g_tres >=  LOW_G_TRES_MIN && buf_str->mpu_low_g_tres <=  LOW_G_TRES_MAX)
//	{
//		main_str->mpu_low_g_tres = buf_str->mpu_low_g_tres;
//		correct_val|=(1<<counter);//выставили бит что значение корректно
//	}
//	counter++;
//
//	if(buf_str->mpu_low_g_time >=  LOW_G_TIME_MIN && buf_str->mpu_low_g_time <=  LOW_G_TIME_MAX)
//	{
//		main_str->mpu_low_g_time = buf_str->mpu_low_g_time;
//		correct_val|=(1<<counter);//выставили бит что значение корректно
//	}
//	counter++;
//
//	if(buf_str->mpu_low_g_Alarm_Tim >=  LOW_G_ALARM_TIME_MIN && buf_str->mpu_low_g_Alarm_Tim <=  LOW_G_ALARM_TIME_MAX)
//	{
//		main_str->mpu_low_g_Alarm_Tim = buf_str->mpu_low_g_Alarm_Tim;
//		correct_val|=(1<<counter);//выставили бит что значение корректно
//	}
//	counter++;
//
//	if(buf_str->mpu_high_g_tres >=  HIGH_G_TRES_MIN && buf_str->mpu_high_g_tres <=  HIGH_G_TRES_MAX)
//	{
//		main_str->mpu_high_g_tres = buf_str->mpu_high_g_tres;
//		correct_val|=(1<<counter);//выставили бит что значение корректно
//	}
//	counter++;
//
//	if(buf_str->mpu_high_g_Alarm_Tim >=  HIGH_G_ALARM_TIME_MIN && buf_str->mpu_high_g_Alarm_Tim <=  HIGH_G_ALARM_TIME_MAX)
//	{
//		main_str->mpu_high_g_Alarm_Tim = buf_str->mpu_high_g_Alarm_Tim;
//		correct_val|=(1<<counter);//выставили бит что значение корректно
//	}
//	counter++;
//
//	//настройки термометра
//	if(buf_str->temp_low_tres >=  TEMP_LOW_MIN && buf_str->temp_low_tres <=  TEMP_LOW_MAX)
//	{
//		main_str->temp_low_tres = buf_str->temp_low_tres;
//		correct_val|=(1<<counter);//выставили бит что значение корректно
//	}
//	counter++;
//
//	if(buf_str->temp_high_tres >=  TEMP_HIGH_MIN && buf_str->temp_high_tres <=  TEMP_HIGH_MAX)
//	{
//		main_str->temp_high_tres = buf_str->temp_high_tres;
//		correct_val|=(1<<counter);//выставили бит что значение корректно
//	}
//	counter++;
//
//	if(buf_str->temp_alarm_time >=  TEMP_WAIT_MIN && buf_str->temp_alarm_time <=  TEMP_WAIT_MAX)
//	{
//		main_str->temp_alarm_time = buf_str->temp_alarm_time;
//		correct_val|=(1<<counter);//выставили бит что значение корректно
//	}
//	return correct_val;
//}
//
//int scan_str_USB(char* mess)
//{
//	int result = -1;
//	ctrl_struct trash_buf = {};//структура для проверки данных
//	//проверка корректности строки
//	//SET_STR:0x4001,0x13,0x1,0x1,0,0,0,0,0,0,0,0,0,0,0,0
//	if(sscanf(mess, "SET_STR %x %x %x %x %d %d %d %d %d %d %d %d %d %d %d %d\n",
//	//if(sscanf(mess, "SET_STR:%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d",
//				//основные параметры
//				&trash_buf.serial_number,
//				&trash_buf.mesh_netid,
//				&trash_buf.master_adr,
//				&trash_buf.mesh_adr,
//				&trash_buf.password,
//				//пороги ФПГ
//				&trash_buf.ppg_hr_high,
//				&trash_buf.ppg_hr_low,
//				&trash_buf.ppg_hr_wait,
//				//акселерометр
//				&trash_buf.mpu_low_g_tres,
//				&trash_buf.mpu_low_g_time,
//				&trash_buf.mpu_low_g_Alarm_Tim,
//				&trash_buf.mpu_high_g_tres,
//				&trash_buf.mpu_high_g_Alarm_Tim,
//				//термометр
//				&trash_buf.temp_low_tres,
//				&trash_buf.temp_high_tres,
//				&trash_buf.temp_alarm_time) == 16)
//	{
//		//проверка корректности значений в строке
//		result = update_str(&trash_buf,&Control);
//	}
//	return result;
//}
//
//
//void FL_write_str(ctrl_struct * control)
//{
//	HAL_FLASH_Unlock();
//	uint8_t data[sizeof(ctrl_struct)] = {0};
//	memcpy(data,control,sizeof(ctrl_struct));
//
//	FLASH_Erase_Sector(MEM_FLASH_SECTOR, VOLTAGE_RANGE_3);
//	for(int i = 0; i < sizeof(ctrl_struct); i++)
//	{
//		HAL_FLASH_Program(FLASH_TYPEPROGRAM_BYTE, MEM_ADR+i, data[i]);
//	}
//	HAL_FLASH_Lock();
//}
//
//uint8_t FL_read_byte(uint32_t addr)
//{
//	return *(volatile uint8_t *)addr;
//}
